AntlrWorks∧语言语法错误语法错误、语言、AntlrWorks、amp

2023-09-03 09:52:51 作者:笑该动人

处理一个游戏项目,该项目涉及一种脚本语言,我希望将其解释为可以直接执行的虚拟机代码。我已经将语法包括在下面。所有的词法分析器规则都正确地显示在语法图中,但是当我点击任何解析器规则的主体时,对于给定的解析器规则X,我得到"无法显示规则X",因为没有找到起始状态。

我真的不确定为什么ANTLR会抱怨没有开始状态。语法应该明确地从代码行开始,它不会被任何其他解析器规则引用。此外,右上角的框为绿色,表示没有语法错误。

基于 ANTLR 自己实现一个 SQL 解析器

我梳理了其他一些留言板帖子,以及ANTLRv3示例语法下载中提供的许多语法,但它们都没有任何特殊代码向ANTLR指示哪个解析器规则是开始状态。我感觉简单的东西被打破了,但我陷入了僵局,到底是什么。

如有任何建议或帮助,我们将不胜感激!即使只是说"去读一读这篇文章"。

grammar RobotWarsGrammar;



EQUAL
options {
    paraphrase = "=";
}
   : '='
   ;

推荐答案

假定您使用的是ANTLR3.x。

所有这些:

options {
    paraphrase = ...;
}

Stuff是(AFAIK)旧的ANTLR 2语法--请尝试删除它。

此外,comment规则中!
comment
  :  !(DIGIT | LETTER | SPACE)*
  ;

是树重写运算符(see the cheat sheet)。但只有在以下情况下才有效:

options { 
  output=AST;
}

在你的语法中(你没有)。因此,也应从您规则中删除。除非您想匹配文字!,在这种情况下,您需要用单引号将其括起来:

comment
  :  '!' (DIGIT | LETTER | SPACE)*
  ;