我设法用Antlr4编写一个解析器/词法分析器用于逻辑表达式。
我唯一的问题是,我无法解决以下问题:
假设我正在将“~p& q”传递给我的程序。它将该公式解释为“〜(p& q)”。 我的问题是我希望在这种情况下将“〜p”解释为对“p”的否定。但我也想要正确解释“〜(p& q)”。
这是我的解析器/词法分析器文件:
grammar LogicFormula;
/*
* Parser Rules
*/
prog: expr+ ;
expr : expr op='&' expr # AND
| expr op='|' expr # OR
| expr op='->' expr # IMPLI
| expr op='<->' expr # BIIMPLI
| op='~' expr # NOT
| BOOL # bool
| '(' expr ')' # parens
;
/*
* Lexer Rules
*/
BOOL : [0-1]|[a-zA-Z];
AND : '&';
OR : '|';
NOT: '~';
IMPLI: '->';
BIIMPLI: '<->';
WS
: (' ' | '\r' | '\n') -> channel(HIDDEN)
;
ErrorCharacter : . ;
有人可以帮我这个吗?
答案 0 :(得分:3)
使用Antlr4非常简单,只需重新排序expr
规则:
expr : '(' expr ')' # parens
| op='~' expr # NOT
| expr op='&' expr # AND
| expr op='|' expr # OR
| expr op='->' expr # IMPLI
| expr op='<->' expr # BIIMPLI
| BOOL # bool
;