我正在为布尔表达式编写递归下降解析器,例如:
(1 * 0)
(0 + ~1)
(0 * (1 + c)
其中 1 是“真”,0 是“假”,+ 是“或”,* 是“和”,~ 是“非”,“c”只是一些变量名(它可以是任何单个字母)。我计划使用括号而不是实现某种操作顺序。
我当前的解析器可以识别以下表达形式
Expression ::= 1
| 0
| Character
| ~ Expression
但我不确定我将如何在此之上实现 + 和 *。从我所读到的明显实现中,我相当确定
Expression ::= 1
| 0
| Character
| ( Expression + Expression )
| ( Expression * Expression )
会导致无限循环,因为它是“左递归”的。我不确定如何更改它以消除这种无限递归。