G = ( N , Σ, P , S ) は、 Pのすべての生成規則が以下の制約を満たす場合、単純な優先順位文法である。
例

- 優先順位表

シンプルな優先順位パーサー
単純な優先順位パーサーは、文脈自由文法のためのボトムアップパーサーの一種であり、単純な優先順位文法でのみ使用できます。
パーサーの実装は、一般的なボトムアップパーサーと非常によく似ています。スタックは、最右導出から得られる文形式の有効な接頭辞を格納するために使用されます。記号 ⋖、≐、⋗ は、ピボットを識別し、シフトまたは還元を行うタイミングを判断するために使用されます。
実装
- 開始記号Sを持つ文法のWirth–Weber優先順位関係表を計算します。
- 開始マーカー$でスタックを初期化します。
- 解析対象の文字列(入力)に終了マーカー$を追加します。
- スタックが「$ S」になり、入力が「$」になるまで
- テーブル内で Top(stack) と NextToken(Input) の関係を検索します。
- 関係が⋖または≐の場合
- シフト:
- プッシュ(スタック、関係性)
- Push(Stack, NextToken(Input))
- RemoveNextToken(Input)
- 関係が⋗である場合
- 減らす:
- SearchProductionToReduce(Stack)
- スタックからピボットを削除する
- 生成規則の非終端記号とスタックの最初の記号(上から順に)との関係を表から検索します。
- プッシュ(スタック、関係性)
- プッシュ(スタック、非終端)
SearchProductionToReduce (Stack)
- スタックの一番上の⋖を見つけます。これとそれより上のすべてのシンボルがピボットです。
- ピボットを右辺とする文法の生成規則を求めなさい。
例
乗算と加算演算を含む算術式を解析できる以下の言語を仮定します。
E --> E + T' | T' T' --> T T --> T * F | F F --> ( E' ) | num E' --> E
numは終端記号であり、字句解析器は任意の整数をnumとして解析します。Eは算術式を表し、Tは項、Fは因数です。
そして解析テーブル:
ヴィルト=ウェーバーの優先順位関係
コンピュータサイエンスにおいて、一対の記号間のヴィルト・ウェーバー関係
形式文法が単純優先順位文法であるかどうかを判断するには、この分析が必要です。単純優先順位文法であれば、単純優先順位構文解析器を使用できます。この関係は、コンピュータ科学者のニクラウス・ヴィルトとヘルムート・ウェーバーにちなんで名付けられました。
目標は、実行可能な接頭辞がピボットを持ち、削減する必要がある時期を特定することです。
ピボットが見つかった、
潜在的な転換点が始まっていることを意味する。
これは、関係が同じ中心点に留まっていることを意味します。


注記
- ↑ 構文解析、翻訳、コンパイルの理論:コンパイル、アルフレッド・V・アホ、ジェフリー・D・ウルマン、プレンティス・ホール、1972年。
- ↑クロード・ペア (1964)。 「アルブル、パイルとコンピレーション」。情報に関するフランセーズ・デ・トレイトメントのレビュー。英語では、ツリー、スタック、コンパイル
- ↑ 『機械、言語、計算』、プレンティス・ホール、1978年、ISBN 9780135422588Wirthと
Weber[1966]はFloydの優先順位文法を一般化し、単純な優先順位文法を得た。
参考文献
- Alfred V. Aho、Jeffrey D. Ullman (1977)。コンパイラ設計の原理。第1版。Addison–Wesley。
- William A. Barrett、John D. Couch (1979)。コンパイラ構築:理論と実践。サイエンスリサーチアソシエイト。
- Jean-Paul Tremblay、PG Sorenson (1985)。コンパイラ作成の理論と実践。McGraw–Hill。
さらに読む
- Aho, Alfred V.; Ullman, Jeffrey D., 『構文解析、翻訳、コンパイルの理論』