我一直得到MissingTokenException,NullPointerException,如果我没记错的话,我会得到NoViableAlterativeException。 ANTLRWorks的日志文件/控制台输出对我来说不够有用。 我需要的是如下重写: (expression | FLOAT) '(' -> (expression | FLOAT) '*(' 下面是我的语法示例,我通过这些示例来创建测试文件。 grammar Test; expression : //FLOAT '(' -> …

2020年8月29日 0条评论 86点热度 阅读全文

我正在使用ANTLR 3,我有一个问题是,如果输入中发生任何错误,如何找到下一个预期的令牌。我试图重写解析器的getErrorMessage(RecognitionException e,String [] tokenNames),我会收到错误,但我无法获得“下一个期望的令牌是什么”。如果有人可以帮助。提前致谢。 解决方案如下: 这听起来并不容易。而且经常没有此类信息。 例如,您的语法可以匹配带括号的表达式,例如:(1+2)。 如果您的解析器现在尝试解析"(1+2",则会抛出一个MismatchedTokenExc…

2020年4月3日 0条评论 48点热度 阅读全文

我正在使用antlr 3和Antlrworks。这是我的设置: lexer Base //包含基本令牌-如WS,数字等。 特定于词法分析器//包含我的语言特定标记-AND衍生自基本词法分析器 解析器特定的// //我的语言的解析器 组合语法->导入特定的词法分析器和特定的解析器 生成时,总是得到一个NPE(用Java)。原因是在生成的特定词法分析器中对基本词法分析器的引用未初始化。 我想念什么吗? 解决方案如下: 在看不到语法导入的情况下无法说出。 请记住: 词法分析器语法只能导入其他词法分析器语法;解析器语…

2020年1月31日 0条评论 32点热度 阅读全文

我正在使用以下简单语法来理解ANTLR。 grammar Example; options { language=Java; } ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; INT : '0'..'9'+ ; PLUS : '+'; ADDNUM : INT PLUS INT; prog : ADDNUM; 当我尝试在ANTLRWorks中为输入 1+2运行语法时,在控制台中出现以下错误: [16:54:08]解释... [16:…

2020年1月26日 0条评论 82点热度 阅读全文