我为3-5*6*8
之类的表达式编写了一个词法分析器和解析器,它被编译为以下标记:
然后解析器采用一种方法,我觉得这种方法是递归下降和反向优先攀爬的组合。它的工作方式大致如下:
parse(3-5*6*8)
add(parse(3), -parse(5*6*8))
add(3, -product(parse(5), parse(6), parse(8))
add(3, -product(5, 6, 8))
像这样,令牌序列从最低优先级解析到最高递归。它还通过括号处理系统处理函数,但这超出了这个问题的范围。
此方法可以归类为任何已知的运算符优先级解析器方法,还是这种新的(奇怪)事物?
我可以想象防止我的方法被轻易归类的一件事是像sum
和product
这样的运算符的多操作数系统,但是我的特定应用程序需要这样来简化实现。 / p>