我为像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
等操作符的多操作数系统,但这是我的特定应用程序所需要的,以简化实现。
发布于 2012-12-06 16:37:24
这听起来有点像Dijkstra的调车算法这里
https://stackoverflow.com/questions/13748005
复制相似问题