私は正確に混乱しました!!!!!!
教授ノートの1つで次の例を読みました。
1) 次のような SLR(1) Grammar G があります。SLR(1) パーサー ジェネレーターを使用して、G の解析テーブル S を生成します。LALR(1) パーサー ジェネレーターを使用して、G の解析テーブル L を生成します。
S->AB
A->dAa
A-> lambda (lambda is a string with length=0)
B->aAb
解決策: S の R (reduce) を持つ要素の数が L を超えています。
しかし、あるサイトで私が読んだ:
2) T1、T2 が文法 G の SLR(1) と LALR(1) で作成されたとします。G が SLR(1) 文法の場合、次のうちどれが真ですか?
a) T1 と T2 に違いはありません。
b) T1 の非エラー エントリの合計数が T2 より少ない
c) T1 のエラー エントリの合計数が T2 より少ない
解決:
LALR(1) アルゴリズムは、SLR(1) アルゴリズムとまったく同じ状態を生成しますが、異なるアクションを生成できます。SLR(1) アルゴリズムよりも多くの競合を解決できます。ただし、文法が SLR(1) の場合、両方のアルゴリズムがまったく同じマシンを生成します (a が正しい)。
どれが真実であるかを説明できる人はいますか?
編集: 実際、私の質問は、特定の SLR(1) 文法について、LALAR(1) と SLR(1) の解析テーブルがまったく同じである理由です (エラーと非エラーのエントリは等しく、reduce の数は等しい)。しかし、上記の文法では、S の Reduced の数は L より多いです。
私は別の本で、一般的に次のことを知っています。
概要:
1) 質問 1 で私が書いた上記の文法の場合、還元される数が異なるのはなぜですか?
2) SLR(1) 文法がある場合、テーブルがまったく同じなのはなぜですか? (削減エントリとエラーエントリの数は同じになります)