【问题标题】:Trouble migrating antlr grammar迁移 antlr 语法时遇到问题
【发布时间】:2015-12-04 03:13:36
【问题描述】:

我过去从未使用过 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。但是山姆的回答并没有帮助我弄清楚我应该改变什么。

如果有人能告诉我最新语法中开始规则的等效内容,我将不胜感激。

【问题讨论】:

  • 请发布完整的语法或至少部分符合规则。
  • @doublep :我在开始规则之前插入了所有语法。还在开始规则之后插入了解析器规则。代码生成似乎适用于除开始规则之外的所有规则。如果您需要更多详细信息,请告诉我。

标签: antlr antlr4 antlr3


【解决方案1】:

您链接的答案似乎适用于您的案例。在 start 等解析器规则之后移动词法分析器规则(即以大写字母开头的 DQUOTE 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2019-04-16
    • 2019-12-30
    • 2013-11-13
    • 2021-04-28
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多