我可以使用python作为词法分析器和解析器用于C源语言吗?实际上,有人说yacc使用LALR解析,而PLY使用LR解析,这是相当有效的,并且非常适合较大的语法,但对可以成功解析的语法的类型略有限制。现在,我正在做编译器课程,仍然要做解析部分。所以对LALR解析不太了解。
发布于 2019-01-21 10:34:22
GCC编译器是使用Bison实现的,Bison是一个LALR解析器生成器,使用时间长达多年。LR比LALR强大,所以你可以在技术上做到这一点。
现在,你是否想做这件事是另一个问题。LALR对C的某些恶劣特性(哇,像“bigly”这样的特朗普主义)并没有什么帮助,而且使用了各种lexer黑客来使它工作。(请参阅我关于为什么C/C++不能用纯LR解析器解析的原因的答案:https://stackoverflow.com/a/1004737/120163)。尽管如此,它在很长一段时间里还是有用的。
现在,听起来您正在执行一个编译器类。在这种情况下,您可能没有实现“所有C",而是一个有趣的子集/变体。在这种情况下,您应该能够设计您的“C类”语法,使它远离C的麻烦点,并继续您的课堂。在学习如何黑入LALR/LR解析器以处理奇怪的语法问题方面,您的课堂没有什么意义。您需要在类中学习的是解析器所做的事情,以及它们如何适应编译器的总体结构;添加怪异并不能改善基础知识的学习。如果您完成了这个课程,并开始为真实语言构建解析器,那么您很快就会遇到这些问题,然后就可以处理它们了。
如果您能够决定langauge语法,那么LALR解析就很好了。
https://stackoverflow.com/questions/54287836
复制相似问题