Parsing 语法分析器/词法分析器逻辑表达式
我设法用Antlr4为逻辑表达式编写了一个解析器/词法分析器 我唯一无法解决的问题是: 假设我正在将“~p&q”传递给我的程序。它将把这个公式解释为“~(p&q)”。 我的问题是,在这种情况下,我想把“~p”解释为对“p”的否定。但我也希望“~(p&q)”得到正确的解释 这是我的解析器/词法分析器文件:Parsing 语法分析器/词法分析器逻辑表达式,parsing,expression,antlr,grammar,antlr4,Parsing,Expression,Antlr,Grammar,Antlr4,我设法用Antlr4为逻辑表达式编写了一个解析器/词法分析器 我唯一无法解决的问题是: 假设我正在将“~p&q”传递给我的程序。它将把这个公式解释为“~(p&q)”。 我的问题是,在这种情况下,我想把“~p”解释为对“p”的否定。但我也希望“~(p&q)”得到正确的解释 这是我的解析器/词法分析器文件: grammar LogicFormula; /* * Parser Rules */ prog: expr+ ; expr : expr op='&' expr # AND
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 : . ;
语法逻辑公式;
/*
*解析器规则
*/
prog:expr+;
expr:expr op='&'expr#和
|expr op=“|”expr#或
|expr op='->'expr#IMPLI
|expr op=''expr#BIIMPLI
|op='~'表达式#非
|BOOL#BOOL
|“(‘expr’)”帕伦斯
;
/*
*Lexer规则
*/
布尔:[0-1]|[a-zA-Z];
及:"及",;
或:“|”;
不是:“~”;
IMPLI:“->”;
比因普里:“;
WS
:(“|”\r“|”\n')->频道(隐藏)
;
错误字符:;
有人能帮我一下吗?使用Antl4这很简单,只需重新排列您的
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
;
expr:'('expr')'#parens
|op='~'表达式#非
|expr op='和'expr#和
|expr op=“|”expr#或
|expr op='->'expr#IMPLI
|expr op=''expr#BIIMPLI
|BOOL#BOOL
;
非常感谢卢卡斯,它确实起了作用,现在我的程序可以正确解释所有内容。