是每LL(1)文法也是一個LR(1)?是否每個LL(1)語法也是一個LR(1)?
回答
是的,因爲這兩個LL和LR解析從左至右的數據;並且由於LL(1)僅向前看一個令牌,它必須是LR(1)。 LR(k)也是如此,其中k> 1,因爲LR(k)語法可以轉換爲LR(1)語法。
LR和LL文法之間的差異來在LR產生最右邊的推導,其中作爲LL產生最左推導。所以這意味着一個LR解析器實際上可以解析一個比LL語法更大的集合,因爲它從樹葉中建立起來。
,假設我們已經制作如下:
然後LL(1)將解析字符串(())
:
(()) -> A
-> "(" A ")"
-> "(" "(" ")" ")"
凡爲LR(1)將解析如下:
Input Stack Action
(()) 0
()) 0 '('
)) 0 '(' '('
) 0 '(' '(' ')' Reduce using A -> "(" ")"
) 0 '(' A
- 0 '(' A ')' Reduce using A -> "(" A ")"
- 0 A Accept
欲瞭解更多信息,請參閱:http://en.wikipedia.org/wiki/LL_parsing
但使用的LL(1)來解析序列(生產的)並不總是相反的順序(生產的)的LR(1)使用解析。即使前者是自上而下的,而後者是自下而上的解析器,所以你所有的LL(1)都是LR(1)的理由似乎不夠。 – siddharth 2010-11-14 01:43:45
東西是LR並不意味着分析樹與等同於逆LL語法分析樹,而語法分析器因而將不一定使用製作以相反的順序。它意味着一個LR解析器可以正確地解析給定相同語法的同一組字符串。 – Mike 2010-11-14 03:31:11
這個事實矛盾嗎? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav 2016-07-24 11:51:12
- 1. LR(1)但不是LL的語法(1)
- 2. 這個語法不是LR(1)嗎?
- 3. 驗證語法是LL(1)
- 4. 如何顯示語法不是LL(1)並將語法轉換爲LL(1)
- 5. Oberon語法不是LL(1)在哪裏?
- 6. 爲什麼LR(1)語法不是LALR(1)?
- 7. 爲什麼這個語法不是LL(1)
- 8. 製作語法LL(1)
- 9. 語法LL(1)衝突
- 10. 如何證明一個文法是LL(k)k> 1
- 11. 每個LR(0)語法都是單反(1),但反過來不一定是正確的,爲什麼?
- 12. LL(1)語法,尋找一個好的,清晰的資源
- 13. 如何確定語言是否爲LL(1)?
- 14. 關於LL(1)語法的例子?
- 15. 如何製作此語法LL(1)?
- 16. 寫入正確的LL(1)語法?
- 17. 將C-語法轉換爲LL(1)
- 18. 模糊語法與LL(1)解析
- 19. 這是匹配括號LL(1)的語法嗎?
- 20. 轉換語法爲LL(1)語法:一些問題
- 21. 什麼是int(a)(1)?這是一個有效的c + +語法?
- 22. LL(1):非模糊語法和第一/跟隨衝突
- 23. 執行ll(k)到ll(1)轉換器!
- 24. 是1個單查詢語句可能
- 25. 是否正確與FK有1到1的關係,這也是PK?
- 26. LR(1)BNF語法功能參數與後省略號
- 27. 如何製作此文法LL(1)?
- 28. 查看數字是否等於1或每第5個數字
- 29. LL(1)不能含糊
- 30. 以1:1基數關聯兩個類是否有意義?
我想我很久以前曾在大學有一天,這個問題;) – foreyez 2010-11-14 04:07:09