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語法