处理涉及脚本语言的游戏项目,我想将其解释为可以直接执行的虚拟机代码。我在下面列出了语法。所有词法分析器规则都在语法图中正确显示,但是当我单击任何解析器规则的主体时,我得到“无法显示规则”X“因为找不到启动状态”对于给定的解析器规则X. / p>
我不确定为什么ANTLR抱怨没有开始状态。语法应该明确地从代码行开始,而代码行没有被任何其他解析器规则引用。此外,右上角的框为绿色,表示没有语法错误。
我梳理了一些其他留言板帖子,以及ANTLRv3示例语法下载中提供的许多语法,但它们都没有任何特殊代码向ANTLR指示哪个解析器规则是开始州。我觉得简单的东西被打破了,但我究竟究竟是什么样的僵局。
非常感谢任何建议或协助!即使它只是沿着“去读这个”的路线。
grammar RobotWarsGrammar;
EQUAL
options {
paraphrase = "=";
}
: '='
;
答案 0 :(得分:2)
假设您使用的是ANTLR 3.x。
所有这些:
options {
paraphrase = ...;
}
东西是(AFAIK)旧的ANTLR 2语法 - 尝试删除它。
此外,您!
规则中的comment
:
comment
: !(DIGIT | LETTER | SPACE)*
;
是 tree-rewrite-operator (see the cheat sheet)。但这只有在你有:
时才有效options {
output=AST;
}
在你的语法中(你没有)。因此,请从!
规则中删除comment
。除非你想匹配文字!
,在这种情况下你需要在它周围包装单引号:
comment
: '!' (DIGIT | LETTER | SPACE)*
;