Q
语法LALR?
4
A
回答
5
LALR(1)⊂LR(1),是的,我们可以假设。这两个语法以类似的方式表示语言,但是LR(1)跟踪比LALR(1)更多的左边状态。参看These lecture notes,其中讨论了两种表示之间的状态差异。
通常,解析器生成器将处理为您创建shift-reduce步骤的所有细节;不同之处在于,基于较大文法的生成器更有可能找到无冲突的解析策略。
1
This document比较两者。
0
下面是一个简单的语法是LR(1),但不LALR(1):
G -> S
S -> c X t
-> c Y n
-> r Y t
-> r X n
X -> a
Y -> a
的LALR(1)解析器生成给你一个LR(0)的状态机。一个LR(1)解析器生成器为您提供一个LR(1)状态机。 (1)状态机比LR(0)状态机多一个状态 。
的LR(0)状态机包含此状态:
X -> a .
Y -> a .
的LR(1)状态机包含的这两种状态而不是 上面显示的一个:
X -> a . { t }
Y -> a . { n }
X -> a . { n }
Y -> a . { t }
问题与LALR是国家是第一个 没有任何知识的头看。然后,在创建状态之后检查或创建外观 。然后LALR 有这样一个状态和外观-A-头,这通常是后来添加的, 看起来就像这样:
X -> a . { t, n }
Y -> a . { n, t }
任何人可以在这里看到了问题?如果预见是't',你选择哪种减少方式? ?它含糊不清!因此,LALR(1)解析器生成器会为您提供减少 - 减少冲突报告,这可能会使作者无经验的语法 混淆。
很少有现实世界的计算机语言,它们的LALR(1)冲突可以用LR(1)解析器生成器来解决。 但是,这些冲突通常可以使用LALR(2) 解析器生成器来解决。
这就是为什么我使LRSTAR为LALR(k)解析器生成器。它可以通过在 运行时使用前面的2来处理上述语法。如果有人向我展示LR(1)但不是 LALR(1)的现实世界语法,它将来可能会成为LR(k)解析器生成器, 。
相关问题
- 1. LALR语法解析
- 2. LALR语法模糊
- 3. C#和Java语法LALR(x)?
- 4. groff的语法LALR(1)?
- 5. 有没有办法让这个语法LALR(1)?
- 6. lalr(1)动作表算法
- 7. LALR语法,尾随逗号和多行列表分配
- 8. 为什么LR(1)语法不是LALR(1)?
- 9. LALR(1)语法如何区分变量和函数调用?
- 10. 柠檬LALR解析器的简单语法
- 11. 用LALR解析器解决我语法中的歧义问题
- 12. 用于字符串连接的LALR语法
- 13. 转换LALR到LL
- 14. LALR(k)至LALR(1)保说明和/或示例
- 15. LALR vs LL解析器
- 16. yacc/bison LALR(1)算法如何处理“空”规则?
- 17. 无法解决以下reduce-reduce错误(LALR解析)
- 18. LALR(1)空函数参数列表
- 19. 如何避免LALR语法中的转换减少冲突来解析嵌套列表?
- 20. 通过生产规则向LALR(1)语法添加错误检查以处理所有输入
- 21. Smarty'if'语法语法
- 22. 语法或不是语法?
- 23. SQLite的MySQL语法语法
- 24. LINQ语法与SQL语法
- 25. PHP语法与语法
- 26. Atom语法语法名称
- 27. MYSQL文档语法语法
- 28. HTTPRequest的语法语法
- 29. ANTLR version2语法语法?
- 30. LINQ语法到SQL语法