2010-11-14 86 views

回答

8

是的,因爲這兩個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

+0

但使用的LL(1)來解析序列(生產的)並不總是相反的順序(生產的)的LR(1)使用解析。即使前者是自上而下的,而後者是自下而上的解析器,所以你所有的LL(1)都是LR(1)的理由似乎不夠。 – siddharth 2010-11-14 01:43:45

+1

東西是LR並不意味着分析樹與等同於逆LL語法分析樹,而語法分析器因而將不一定使用製作以相反的順序。它意味着一個LR解析器可以正確地解析給定相同語法的同一組字符串。 – Mike 2010-11-14 03:31:11

+0

這個事實矛盾嗎? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav 2016-07-24 11:51:12