2013-05-06 54 views
13

我正在使用返回,该解析器规则适用于除第一个解析器规则以外的所有解析器规则。如果我的语法第一解析器规则使用回报声明ANTLR4抱怨如下:ANTLR4语法中第一个解析器规则返回声明的问题

期待ARG_ACTION同时匹配的规则

如果我添加其他解析器规则上面不使用“收益” ANTLR不抱怨。

这里有一个语法降低的问题:

grammar FirstParserRuleReturnIssue; 
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
aRule returns [String s]: ID { $s = $ID.text; }; 

我搜索以找到可以解释的行为,但没有发现任何东西的第一条规则的特殊作用。这是一个错误吗?我错过了一些理解?

回答

13

您需要在语法中的词法分析器规则(以大写字母开头)之前放置解析器规则(以小写字母开头)。在遇到词法分析规则之后,[会触发LEXER_CHAR_SET而不是ARG_ACTION,因此编译器看到的令牌流看起来像是在返回值应该在的位置传递一组字符。

+0

这看起来像是ANTLR中的一个bug,对吧? – 2018-03-01 05:27:24