PLY for C源语言

时间:2019-01-21 10:22:10

标签: parsing yacc lex

我可以将python lex yacc用于词法分析器,而将解析器用于C源语言吗?实际上,已经写过yacc使用的是LALR解析,PLY使用的是LR解析,这是相当有效的,非常适合较大的语法,但是对可以成功解析的语法的类型稍有限制。现在,我目前正在做编译器课程,并且仍然要进行解析。所以对LALR解析了解不多。

1 个答案:

答案 0 :(得分:2)

GCC编译器使用LALR解析器生成器Bison实现了很多年。 LR比LALR更强大,因此您可以从技术上做到这一点。

现在,是否要这样做是另一个问题。 LALR对C的某些令人讨厌的功能(哇,像“大”之类的王牌)没有帮助,并且使用了各种lexer hack使其工作。 (请参阅我关于为何无法使用纯LR解析器解析C / C ++的SO答案:https://stackoverflow.com/a/1004737/120163)。尽管如此,它仍然有用了很长时间。

现在,听起来您正在做一个编译器类。在这种情况下,您可能没有实现“ C的全部”,而是实现了一个有趣的子集/变量。在这种情况下,您应该能够将“ C类”语法从C的麻烦点中解脱出来,并继续上课。对于您的班级来说,学习如何破解LALR / LR解析器以处理奇怪的语法问题毫无意义。您需要在课堂上学习的是解析器的功能,以及解析器如何适应编译器的整体结构;添加怪异感不会改善基础知识的学习。如果您完成课程,并开始构建用于真实语言的解析器,您将很快遇到这些问题,然后可以对其进行处理。

如果您要确定语言语法,则LALR解析就可以了。