我以前从未使用过antlr,但现在必须将旧版本的语法迁移到最新版本。我正在尝试为c#目标生成词法分析器和解析器。我不得不迁移下面的启动规则。
grammar expr;
DQUOTE: '\"';
SQUOTE: '\'';
NEG : '-';
PLUS : '+';
OPEN : '(';
CLOSE : ')';
PERIOD: '.';
COMMA : ',';
start returns [Expression value]
:
expression EOF { $value = $expression.value; }
;
expression returns [Expression value]
:
literal { $value = $literal.value; }
| name { $value = $name.value; }
| functionCall { $value = $functionCall.value; }
;
我收到以下错误。 语法错误:
不匹配的输入'[表达式值]'期待ARG_ACTION而 匹配规则。
我已经发现了帖子Troubles with returns declaration on the first parser rule in an ANTLR4 grammar。但Sam的反应并没有帮助我弄清楚我应该改变的是什么。
如果有人能让我知道相当于最新语法中的起始规则,我将不胜感激。
答案 0 :(得分:1)
您链接的答案似乎适用于您的案例。在像DQUOTE
这样的解析器规则之后移动词法规则(即那些以大写字母开头的规则,start
等)。