>> ZG·言語学習 >  >> 理論言語学 >> 構文

文法がLALRであるがSLRではないことをどのように示しますか?

文法はlalrであるがslrではないことを実証する方法は次のとおりです。

slrとlalr を理解しています

* slr(simple lr): 単一のLookaheadシンボルを使用して、正しい削減を決定します。これは、最も単純なLRパーサータイプです。

* lalr(look-ahead lr): 同じ見た目のシンボルを持つSLRパーサーの状態を組み合わせて、より強力なパーサーになります。各状態に * lookaheadセット *(複数のシンボル)を使用します。

lalrを実証しますが、slr

1。 SLR解析テーブルを構築します: 文法のためにSLR解析テーブルを作成します。これには次のことが含まれます。

-LR(0)オートマトンの構築。

- 各非ターミナルのフォローセットを計算します。

- LR(0)オートマトンに基づいて解析テーブルを埋め、フォローセット。

2。 SLR表の競合を特定します: 同じ状態とLookaheadシンボルに複数のアクション(削減またはシフト)が必要な状況を探します。競合を見つけた場合、文法はSLRではありません。

3。 lalr解析テーブルを構築します: 次に、LALR解析テーブルを構築します。これには次のことが含まれます。

-SLR状態を同一のLookaheadセットと組み合わせる。

-SLRテーブルの競合を解決するために、複合Lookaheadセットを使用します。

4。 LALRテーブルが競合のないことを確認してください: LALRテーブルに競合がない場合、文法はLALRです。

簡単な例を見てみましょう:

`` `

s-> a a

a-> b | c

`` `

slr競合:

* SLRパーサーは、「A」が表示される州で競合します。 「A」をシフトするか、ルール「A-> B」を使用して減らすことができます。 SLRパーサーには1つのLookaheadシンボルしかありません。これら2つのアクションを区別することはできません。

lalr解像度:

* Lalrパーサーでは、「A」が表示される状態は、Lookaheadに基づいて2つの状態に分割されます。

* 状態1: lookahead set {a}( "a-> b"に縮小)

* 状態2: lookahead set {$}(shifts "a")

この解決策は紛争を排除し、文法をlalrにします。

キーポイント

*文法がSLRの場合、それもLALRです。ただし、逆は真実ではありません。

* LALRパーサーは、SLRパーサーができない特定の競合を解決できるため、SLRパーサーよりも強力です。

* lalrの解析は、解析力と効率性のバランスが良いため、実際によく使用されます。

特定の文法を念頭に置いている場合はお知らせください。LALRではなくLALRであるかどうかを確認するプロセスをご覧ください。

著作権 © ZG·言語学習(www.zongjiefanwen.com) 無断複写・転載を禁じます。