2
下面这个简单的语法解析在减少/减少冲突的逻辑表达式的结果:简单暧昧的语法与减少,减少冲突
%token AND OR
%token NUMBER VARIABLE
%%
logical_expr
: logical_expr AND logical_term
| logical_expr OR logical_term
| logical_term
;
logical_term
: VARIABLE
| comparison
| '(' logical_expr ')'
;
comparison
: expr '<' expr
| expr '>' expr
;
expr
: expr '+' term
| expr '-' term
| term
;
term
: NUMBER
| VARIABLE
| '(' expr ')'
;
%%
从野牛状态报告有:
state 2
4 logical_term: VARIABLE .
13 term: VARIABLE .
')' reduce using rule 4 (logical_term)
')' [reduce using rule 13 (term)]
'<' reduce using rule 13 (term)
'>' reduce using rule 13 (term)
'+' reduce using rule 13 (term)
'-' reduce using rule 13 (term)
$default reduce using rule 4 (logical_term)
我猜测问题是它无法弄清楚如何解析“(a)+ 1 < 2”。如何消除这种语法的歧义?可能吗?
谢谢。我认为这是一个明智的解决方案。我可能只是放松语法,这样它就可以允许布尔值被预期的数字,以及一些合适的真/假惯例,例如零/非零。 – jlam
@ user1745019 - 因为你是新的......不要忘记标记为答案。很好的答案,克里斯。 –