如何使用运算符优先级实现解析?

时间:2010-11-12 12:58:29

标签: parsing operator-precedence

我想使用运算符优先级实现解析。我实现了+, - ,*和/。如何使用任何语法实现休息?这是一个大学项目,不允许yacc或野牛。

3 个答案:

答案 0 :(得分:2)

您需要的是递归下降解析器(因为这是唯一可以轻松手动编写的解析器)。有关详细信息,请参阅维基百科,这很简单。

因此,要获得运算符优先权,您可以执行以下操作:

term = number
unary = ('-' | '+')* term
multiplication = unary ('*' | '/' unary)*
addition = multiplication ('+' | '-' multiplication)*
expression = addition

'表达'是你的起始规则。

答案 1 :(得分:1)

由于您不允许使用解析器生成器。我建议阅读Recursive descent parser Dragon Book

中包含了非常好的介绍

答案 2 :(得分:-1)

如果您需要快速修复:

http://www.codecodex.com/wiki/index.php?title=Recursive_descent_parsing

更广泛的阅读:

Basic Compiler Design

GLHF!