![]() |
1
1
GCC编译器使用LALR解析器生成器bison实现多年。LR比LALR更强大,所以从技术上讲你可以做到。 现在,你是否想这样做是另一个问题。拉尔对C的某些令人讨厌的特性(哇,像“bigly”这样的王牌)毫无帮助,各种各样的雷克斯黑客被用来让它工作。(见我的SO答案)为什么C/C++不能用纯LR解析器解析: https://stackoverflow.com/a/1004737/120163 )尽管如此,它还是很长一段时间有用。 现在,听起来你在做一个编译器类。在这种情况下,您可能没有实现“全部C”,而是一个有趣的子集/变体。在这种情况下,你应该能够设计出你的“C-like”语法,把它从C的麻烦点弯开,继续你的课程。在学习如何对lalr/lr解析器进行黑客攻击以处理奇怪的语法问题方面,您的课程没有什么意义。在课堂上,你需要学习的是解析器的工作,以及它们如何适应编译器的整体结构;添加怪癖并不能提高学习基础知识的能力。如果您完成了这个类,并开始为真正的语言构建解析器,那么您很快就会遇到这些问题,然后可以处理它们。 如果您能决定语言语法,那么LALR解析就可以了。 |
![]() |
Pandemonium · 更改词法分析的状态。lexbuf公司 7 年前 |
![]() |
gornvix · 分析多个文件时出现错误的lex状态 10 年前 |
|
Xethen · 用C语言进行Lex编码 11 年前 |
![]() |
Shehzaad · 为什么它显示我的函数在返回char*时返回int? 11 年前 |
![]() |
Nikon the Third · 如何解析连续的文本流 12 年前 |
![]() |
TreeTree · lex和yacc的运行时“语法错误” 12 年前 |
![]() |
footy · 如何解决2+2和2++2冲突 12 年前 |