我正在使用返回作为我的解析器规则,该规则适用于除第一个之外的所有解析器规则。如果我的语法中的第一个解析器规则使用返回声明,则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; };
我搜索了第一条规则的特殊角色,它可以解释行为,但没有找到任何东西。这是一个错误吗?我错过了一些理解吗?
答案 0 :(得分:13)
您需要在语法中的词法分析器规则(以大写字母开头)之前放置解析器规则(以小写字母开头)。在遇到词法分析器规则后,[
会触发LEXER_CHAR_SET
而不是ARG_ACTION
,因此编译器看到的令牌流看起来像是在传递一组字符,其中返回值应该是是