错误消息表示包含值“ void”的预期令牌类型与通过使用输入中的字符串“
void”产生的实际令牌类型不匹配。查看您的词法分析器规则,表明IDENTIFIER规则正在使用输入字符串’void’,从而生成IDENTIFIER类型的令牌,而不是VOID。
通常,与最长输入字符串匹配的词法分析器规则会获胜。对于两个(或更多)具有相同比赛时间的规则,第一个列出的获胜。将所有关键字规则移到IDENTIFIER规则上方。
有用的单元测试表单将转储lex标记,并显示匹配的实际标记类型。就像是:
CommonTokenStream tokens = ...tokens.fill();StringBuilder sb = new StringBuilder();for (Token token : tokens.getTokens()) { sb.append(((YourCustomTokenType) token).toString());}System.out.print(sb.toString());
Token.toString()方法通常足够好。覆盖您的令牌子类以适合您自己的需求。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)