我以前从未使用过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; }
;
我收到以下错误 . syntax error:
不匹配的输入'[表达式值]'在匹配规则时期望ARG_ACTION .
我已经遇到了一个帖子Troubles with returns declaration on the first parser rule in an ANTLR4 grammar . 但Sam的回答并没有帮助我弄清楚我的情况应该改变什么 .
如果有人能让我知道相当于最新语法中的起始规则,我将不胜感激 .
1 回答
您链接的答案似乎适用于您的案例 . 在像
start
之类的解析器规则之后移动词法分析器规则(即那些以大写字母开头的规则,DQUOTE
等) .