当前位置: 首页 > 知识库问答 >
问题:

ANTLR4语法中第一个解析器规则的返回声明的问题

巫马劲
2023-03-14

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

匹配规则时需要ARG_ACTION

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

共有1个答案

娄弘
2023-03-14

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

 类似资料:
  • 我对是否允许以下情况感到困惑: UPDATE:我知道当我在for循环中提供正确的声明类型时,它就会工作。问题是如果我不这样做会发生什么?

  • 我对ANTLR相对来说是新的,所以请原谅我。 但是当我试图解析下面的表达式时 我最终出现以下错误: 第1:38行:'''处的令牌识别错误 第1:42行:'''处的令牌识别错误 规则r没有方法或者它有参数 规则'r'的意思是什么?我怎么能理解问题的原因呢?任何帮助都将不胜感激!

  • 可能在内部使用的代码将在规则之后被取消,如下所示: ANTLR4就是这样做事的吗?

  • 我的语法允许以下操作: 我从其他语法中抓了几个东西来玩。我的主要问题是我的expr规则。给定以下输入:,我期望解析树会找到..规则,但它将解释0。并不正确解析其余部分。 如果在我的0后面加上一个空格,就可以了: 谢了!

  • 我正在使用antlr4 c语法作为我自己语法的灵感。我来了一件事,我真的不明白。为什么没有使用数据类型时会有Lexer规则?例如,规则从未使用过,但分析器规则(为了简化已删除其他数据类型)使用了好几个地方。解析器规则typeSpecifier没有使用lexer规则double有什么原因吗?