如何使用运算符优先级来实现解析?
我想使用运算符优先级来实现解析。我已经实现了 +、-、* 和 /。我如何在不使用任何语法的情况下实现休息?这是一个大学项目,不允许使用 yacc 或 bison。
I want to implement parsing using operator precedence. I have implemented +, -, *, and /. How would I implement rest with out using any grammar? This is a college project and yacc or bison are not allowed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要的是一个递归下降解析器(因为这是唯一可以轻松手工编写的解析器)。详细信息请参阅维基百科,这很简单。
因此,要获得正确的运算符优先级,您可以执行以下操作:
其中“表达式”是您的起始规则。
What you need is a recursive descent parser (because that's the only parser that can easily be written by hand). See Wikipedia for details, it's pretty easy.
So, to get operator precedence right you can do something like this:
Where 'expression' is your starting rule.
由于您不允许使用解析器生成器,因此我建议阅读有关 递归下降解析器
。
龙之书中有非常好的介绍
Since you're not allowed to use a parser generator, I would recommend reading about the Recursive descent parser
.
A very good introduction is included in the Dragon Book
如果您需要快速修复:
http://www.codecodex.com/wiki/ index.php?title=Recursive_descent_parsing
更广泛的阅读:
基本编译器设计
GLHF!
If you need a quick fix:
http://www.codecodex.com/wiki/index.php?title=Recursive_descent_parsing
more extensive reading:
Basic Compiler Design
GLHF!