我正在尝试在 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 而终止。我不确定这应该去哪里,因为将它添加到句子中不起作用。