0

私は次の文法を書きました:

S->S ( S ) S
S->e

e は「空の文字列」を表します

したがって、この文法が認識する言語には、()、(())、(()()) などのように、左右の括弧が一致するすべての文字列が含まれます。

この文法は SLR ではありません。SLR 解析テーブルを作成する方法は次のとおりです。

  1. この文法を拡張します。

    S1->S S->S(S)S S->e

  2. 次に、LR(0) オートマトンを構築します。

    I0: S1->.S S->.S(S)S S->.e

    I1: S1->S。S->S.(S)S

...

I0 の場合、この文法が生成する文字列の最初のトークンである入力記号 '(' に対するシフトまたは削減アクションがないことに注意してください。

したがって、状態 I0 では、文字列 (()) を解析するときに何をすべきかわからないため、SLR 解析テーブルはエラーを生成します。

私の質問は:

この文法が SLR ではない原因は何ですか? 空文字列制作ですか?つまり、S->e です。?

そして、一般的な意味で、SLR 文法は空のプロダクションを持つことができますか? のように、この例では S->e です。ありがとう。

4

1 に答える 1

0

答えは OK です。現在の入力に使用可能なシフト/削減アクションがなく、空の積にシフトがある場合、この空のターミナルでシフトすることを選択します。

于 2013-04-18T08:35:03.773 に答える