【发布时间】:2013-01-17 13:00:22
【问题描述】:
我正在尝试在 Antlr 中为命题逻辑创建 BNF 语法,但我不断收到错误消息:
java.lang.NoSuchFieldError: offendingToken
由于没有显示行号,我不知道错误在哪里。构建成功,但是当我输入示例输入时,树在句子处停止,即 BNF 中定义的第一项。
这是我的 BNF:
grammar Grammar;
options {
language = Java;
output = AST;
ASTLabelType=CommonTree;
}
@header {
package antlr;
}
@members {
}
@lexer::header { //lexer
package antlr;
}
@lexer::members {
}
sentence: atomicsentence | complexsentence;
atomicsentence: 'T' | 'F' | symbol;
complexsentence: unop sentence | sentence binop sentence | (sentence);
unop: 'NOT';
binop: 'AND' | 'OR' | 'IMPLIES' | 'EQUIVALENT';
symbol: (LEXRULE)+;
LEXRULE: ('a'..'z')|('A'..'Z');
如果你注释掉句子中的复句,原子句部分会起作用,直到它因为没有 EOF 而终止。我不确定这应该去哪里,因为将它添加到句子中不起作用。
【问题讨论】:
-
好吧,请展示您输入的示例。
-
另外向我们展示您的语法的完整来源,包括标题
-
我添加了完整的语法。我也尝试了各种输入,最简单的是
NOT p,但没有奏效。 -
看看我编辑的答案