すべてのLL(1)文法もLR(1)ですか?
7275 次
1 に答える
11
はい、LLとLRの両方がデータを左から右に解析するためです。LL(1)は1つのトークンのみを先読みするため、必ずLR(1)である必要があります。これはLR(k)にも当てはまります。LR(k)文法はLR(1)文法に変換できるため、k>1です。
LR文法とLL文法の違いは、LRが右端の派生を生成するのに対し、LLは左端の派生を生成することです。つまり、これは、LRパーサーが、葉から構築されるLL文法よりも大きなセットを実際に解析できることを意味します。
次のような作品があるとしましょう。
A -> "(" A ")" | "(" ")"
次に、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を参照してください。
于 2010-11-14T01:24:32.623 に答える