我目前正在使用一个编译器类,并且我很难理解LR(1)使用action/goto表的解析算法以及如何手工生成这些表。现在我们使用Cooper和Torczon编写的Engineering a Compiler作为我们的课本,并且还阅读了关于表格生成的维基百科页面,但我仍然不理解这些概念。如果可能的话,任何人都可以推荐任何解释得当的解析或在线资源的其他书籍?我想很多大学会有很好的在线资源/幻灯片,但我不知道从哪里开始寻找。谢谢!帮助理解LR(1)解析器,表生成?任何其他资源?
回答
一些像样的讲稿......
http://cs.oberlin.edu/~jdonalds/331/lecture14.html
理解和写作编译器有一个部分,什么是LR(1)分析的真正优势?
http://www.amazon.com/Understanding-Writing-Compilers-Yourself-Macmillan/dp/0333217322
(也可免费在线)
这里是一个体面的摘要的链接,虽然解释是缺乏。
http://arantxa.ii.uam.es/~modonnel/Compilers/LR1Summary.pdf
更讲义......
http://www.cs.umd.edu/class/spring2011/cmsc430/lectures/lec07.pdf
这里指出...
http://cobweb.ecn.purdue.edu/~smidkiff/ece495S/files/handouts/w3w4bBW.pdf
(包括GOTO和操作表)
对不起,我不能亲自解释,我不太确定我自己。也许你会发现一个善良,更有知识的灵魂。
由于算法的细节,书籍总是很难阅读。除非你已经知道他们的意思,否则希腊符号和抽象操作很难解释。
我学会了如何做到这一点的方式,是写一个小小的语法(简单的表达, 赋值语句,如果再声明,声明的顺序),然后手模拟算法。得到一张非常大的纸。用目标符号和点[G = DOT RHS1 ... RHSM]绘制起始配置状态。然后按照算法详细处理未处理的状态;写下每个希腊符号代表的那一刻。随着你获得自信,你会有更好的感觉,并且会更快。
本质上你所要做的是,对每个项目我
[LHS RHS1 DOT RHS2 RHS3 ... RHSN]
的状态
,一个地方推点在项目的权利,产生一个新的项目
[LHS RHS1 RHS2 DOT RHS3 ... RHSN ]
平局在你的纸上新状态以该物品为种子的新状态,用基于FIRST(RHS3)的前瞻集填充物品核心,展开状态并重复。
这会在您第一次尝试时花费几个小时。每一秒都值得。 使用铅笔!
- 1. PERL XPath解析器帮助
- 2. scala:解析器帮助
- 3. 用于编写解析器生成器的在线资源
- 4. 解析资源
- 5. 串解析帮助
- 6. 帮助解析resources.arsc?
- 7. 帮助URL解析
- 8. ANTLR vs. Happy与其他解析器生成器
- 9. 需要帮助理解layout_weight = “1”
- 10. LR(1)解析时处理无限循环
- 11. 帮助理解jQuery
- 12. 帮助理解gluLookAt()
- 13. 从柠檬语法分析器生成器生成LR分析表
- 14. 帮助理解单一责任原则
- 15. 帮助解释分析器结果[STL]
- 16. 帮助创建peg.js解析器
- 17. XML解析器需要帮助
- 18. XML jquery解析帮助
- 19. 位置解析帮助请
- 20. 帮助用DOMDocument解析XML
- 21. 字符串解析帮助
- 22. 需要帮助解析JSON
- 23. 需要帮助解析JSON
- 24. 在VB.Net解析帮助
- 25. 帮助Java Swing HTML解析
- 26. EditText解析为int帮助
- 27. 帮助解析S-表达式
- 28. 解析Haskell图表生成器错误
- 29. 任何BPEL解析器和XML生成器在一起?
- 30. 仅解析Android Xml资源解析器节点
+1。我和几个朋友在我们的办公室做了这个,几年前我们编了一门编译器课程。状态机填满了整个白板,所以我们不得不在邻近的黑板上绘制动作/转到桌子。然后,我们没有足够的表面空间来记录算法的实际执行情况(堆栈内容和正在执行的操作) - 直到我们发现_windows_是写表面的绝佳来源!我们从绕行者那里得到了不少困惑的样子...... :-) – 2011-03-06 17:03:30
@Aasmund Eldhuset:对建设性使用Windows的+1: - } – 2011-03-06 18:09:02
我应该看到一个来临:p – 2011-03-06 21:16:22