我正在构建一个简单的语言解析器,并且遇到了较低优先级前缀表达式的问题。这是一个示例语法:
E = E5
E5 = E4 'OR' E4 | E4
E4 = E3 'AND' E3 | E3
E3 = 'NOT' E3 | E2
E2 = E1 '==' E1 | E1
E1 = '(' E ')' | 'true' | 'false'
NOT
但是,如果将其用作更高优先级中缀运算符的 RHS,则此语法不适用于 ,即:
true == NOT false
这是由于==
操作员在 RHS 上需要 E1,这不能是 NOT 操作。
我不确定表达这种语法的正确方法?是否仍然可以使用这种简单的递归下降方法,或者我需要转向更具特色的算法(调车场或优先攀登)。