我已经为像这样的表达式编写了一个词法分析器和解析器3-5*6*8
,它被编译为以下标记:
- 编号(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
,但这是我的特定应用程序需要的,以简化实现。