1

从事涉及脚本语言的游戏项目,我想将其解释为可以直接执行的虚拟机代码。我已经包含了下面的语法。所有词法分析器规则都在语法图中正确显示,但是当我单击任何解析器规则的主体时,对于给定的解析器规则 X,我得到“无法显示规则“X”,因为找不到开始状态”。

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

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

任何建议或帮助将不胜感激!即使它只是沿着“去读这个”的路线。

grammar RobotWarsGrammar;



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

1 回答 1

2

假设您使用的是 ANTLR 3.x。

所有这些:

options {
    paraphrase = ...;
}

东西是(AFAIK)旧的 ANTLR 2 语法——尝试删除它。

此外,!在您的comment规则中:

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

是一个树重写运算符参见备忘单)。但这仅在您具有以下条件时才有效:

options { 
  output=AST;
}

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

comment
  :  '!' (DIGIT | LETTER | SPACE)*
  ;
于 2010-12-03T21:19:25.987 回答