我試圖在評估命題邏輯公式的ANTLR中創建一個語法。所以對於輸入(1 & 0) | 1
,它應該返回true
。ANTLR命題邏輯評估器
我已經構建了以下內容:
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代碼來調試這些問題。你的堆棧跟蹤應該包含行號,並且生成的代碼將有註釋,表示哪個規則的哪一部分被表示。 –