Я пытаюсь создать грамматику в ANTLR, которая оценивает формулы логики высказываний. Поэтому для ввода (1 & 0) | 1
он должен вернуть true
.ANTLR Propositional Logic Evaluator
Я построил следующее:
code returns[boolean value]
: formula EOF {$value = $formula.value;}
;
formula returns [boolean value]
: equiv {$value = $equiv.value;}
;
equiv returns [boolean value]
: a=implies {$value = $a.value;}
('#' b=implies {$value = $value == $b.value;}
)*
;
implies returns [boolean value]
: a=or {$value = $a.value;}
('>' b=or {$value = !$value || $b.value;}
)*
;
or returns [boolean value]
: a=and {$value = $a.value;}
('|' b=and {$value ||= $b.value;}
)*
;
and returns [boolean value]
: a=term {$value = $a.value;}
('&' b=term {$value &&= $b.value;}
)*
;
term returns [boolean value]
: '(' formula ')' {$value = $formula.value;}
| '0' {$value = false;}
| '1' {$value = true;}
| '¬' term {$value = !$term.value;}
;
WHITESPACE: (' '|'\t'|'\r'|'\f'|'\n')+{$channel = HIDDEN;} ;
Однако я получаю ошибку java.lang.NoSuchFieldError: offendingToken. Есть ли в любом случае, чтобы узнать, где ошибка или как ее исправить?
Как эксперт, не являющийся ANTLR, я отлаживаю эти проблемы, просматривая сгенерированный код Java. Трассировка стека должна содержать номера строк, а сгенерированный код будет содержать комментарии, указывающие, какая часть этого правила представлена. –