
int v;main(){」を消化し、非終端記号「 」を導出する規則を選択しようとしているパーサーを示しているStmt。最初の先読みトークン「v」だけを見ても、2つの入力継続が可能なため、「 」のどちらの選択肢をStmt選択するかは決定できない。2番目の先読みトークン(黄色の背景)を見ることで、それらを区別することができる。形式言語理論では、LL 文法はLL パーサーによって解析できる文脈自由文法であり、 LL パーサーは入力を左から右に解析し、文の最左導出を構築します (したがって LL であり、最右導出を構築する LR パーサーと比較されます)。LL文法を持つ言語はLL 言語として知られています。これらは、それぞれ決定論的文脈自由文法(DCFG) と決定論的文脈自由言語(DCFL)のサブセットを形成します。特定の文法または言語が「LL 文法/言語である」または単に「LL である」と述べて、それがこのクラスに属することを示します。
LL パーサーは、LR パーサーに似たテーブルベースのパーサーです。LL 文法は、予測パーサー(バックトラックのない再帰下降パーサー) によって解析できるものとして特徴付けられ、簡単に手作業で記述できます。この記事では、LL 文法の形式的な特性について説明します。解析については、 LL パーサーまたは再帰下降パーサーを参照してください。
正式な定義
有限の場合
自然数 が与えられたとき、文脈自由文法 はLL(k) 文法であるとは、
- 最大記号の長さの各終端記号文字列について、
- 各非終端記号に対して、
- 各終端記号文字列について、
ある終端記号文字列に対して、
- 文字列は開始記号から派生し、
- は、まず規則を適用した後に導出することができ、
- との最初の記号は一致する。[2]
代替の、しかし同等の正式な定義は次の通りである: は、任意の導出に対して、 LL(k)文法である。
の最初の記号がの最初の記号と一致するとき、 となる。[3] [4]
非公式には、パーサーが を、その最も左の非終端記号と がすでに入力から消費された状態で導出した場合、それを調べ、現在の入力の次の記号を調べることで、パーサーはの生成規則を確実に識別できます。
過去の入力を考慮しなくても規則の識別が可能な場合、その文法は強いLL(k)文法と呼ばれます。[5]強いLL( k )文法の正式な定義では、の普遍量指定子は省略され、の「for some」量指定子に追加されます。すべてのLL( k )文法に対して、構造的に同等な強いLL( k )文法を構築できます。[6]
LL( k )言語のクラスは、集合の厳密に増加するシーケンスを形成します: LL(0) ⊊ LL(1) ⊊ LL(2) ⊊ …。[7]与えられた文法GがLL( k )であるかどうかは決定可能ですが、任意の文法が何らかのkに対してLL( k )であるかどうかは決定できません。与えられたLR( k )文法が何らかのmに対してLL( m )文法でもあるかどうかも決定可能です。[8]
すべてのLL( k )文法はLR( k )文法でもある。εを含まないLL(1)文法はSLR(1)文法でもある。空導出と非空導出の両方を持つ記号を持つLL(1)文法もLALR(1)文法である。空導出のみを持つ記号を持つLL(1)文法はLALR(1)である場合もそうでない場合もある。[9]
LL文法は左再帰を含む規則を持つことができない。[10] ε-freeの各LL( k )文法は、同等のグライバッハ標準形のLL( k )文法に変換できる(定義上、左再帰を含む規則を持たない)。[11]
通常ケース
を終端アルファベットとします。の分割は、すべての に対して言語が正則である場合、正則分割と呼ばれます。
を文脈自由文法とし、を の正規分割とする。任意の導出に対して、 がLL( ) 文法であるとは、
となる。[ 12]
文法GがLL 正規(LLR)であるとは、 Gが LL( )となるような正規分割が存在する場合です。言語が LL 正規であるとは、LL 正規文法によって生成される場合です。
LLR 文法は明確であり、左再帰にはなりません。
すべてのLL( k )文法はLLRである。すべてのLL( k )文法は決定論的であるが、決定論的ではないLLR文法も存在する。[13]したがって、LLR文法のクラスは、各kに対するLL( k )の和集合よりも厳密に大きい。
正規分割が与えられた場合、与えられた文法が LL( ) であるかどうかは決定可能です。しかし、任意の文法Gが LLR であるかどうかは決定できません。これは、文法G が正規言語を生成するかどうかを決定すること(これはGの正規分割を見つけるために必要) が、ポスト対応問題に還元できるという事実によるものです。
すべてのLLR文法はLR正規文法(LRR、LR( k )文法の対応する[明確化]同等物)であるが、LLRではないLR(1)文法が存在する。[13]
歴史的に、LLR 文法は LRR 文法の発明に続いて生まれました。正規のパーティションが与えられれば、ムーア マシンを構築して構文解析を右から左に変換し、正規の生成のインスタンスを識別できます。これが完了すると、LL(1) パーサーは変換された入力を線形時間で処理するのに十分です。したがって、LLR パーサーは、LL( k ) パーサーよりも厳密に大きい文法のクラスを、同等の効率で処理できます。それにもかかわらず、LLR の理論には大きな用途がありません。考えられる非常にもっともらしい理由の 1 つは、LL( k ) および LR( k ) パーサーの生成アルゴリズムはあるものの、事前に正規のパーティションを構築しておかない限り、LLR/LRR パーサーを生成する問題は決定不可能であるということです。しかし、文法が与えられた場合に適切な正規のパーティションを構築する問題でさえ決定不可能です。
シンプルな決定論的言語
文脈自由文法は、単純決定論的文法[14]または単に単純文法[ 15]と呼ばれる。
- これはグライバッハ標準形(つまり各規則は の形を持つ)であり、
- 同じ非終端記号の異なる右辺は常に異なる終端記号で始まります。
文字列のセットは、単純な決定論的文法を持つ場合、単純な決定論的言語、または単に単純な言語と呼ばれます。
グライバッハ正規形でεフリーLL(1)文法を持つ言語のクラスは、単純決定論的言語のクラスに等しい。[16] この言語クラスには、εを含まない正規集合が含まれる。[15]同値性は決定可能であるが、包含は決定不可能である。[14]
アプリケーション
LL文法、特にLL(1)文法は、LLパーサーまたは再帰下降パーサーのいずれかによって解析が容易であるため、実用上非常に興味深いものであり、多くのコンピュータ言語[明確化]は、この理由からLL(1)になるように設計されています。高い値のkを持つ文法に基づく言語は、伝統的に解析が難しいと考えられてきました[引用が必要]が、任意のkに対してLL( k )文法をサポートするパーサージェネレーターが利用可能で広く使用されていることを考えると、これは現在ではそれほど当てはまりません[引用が必要]。
参照
- LL(k) および LL(*) パーサーのリストに対するパーサー ジェネレータの比較
注記
- ^ Kernighan & Ritchie 1988、付録 A.13「文法」、p.193 ff。上の画像部分は、 EBNFのような表記法で簡略化された抜粋を示しています。
- ^ Rosenkrantz & Stearns (1970, p. 227). 定義1. 著者らはk =0の場合を考慮していない。
- ^ ここで「」は左端導出による導出可能性を示し、、、および
- ^ ウェイト&グース (1984, p. 123) Def. 5.22
- ^ ローゼンクランツ&スターンズ(1970年、235ページ)定義2
- ^ Rosenkrantz & Stearns (1970, p. 235) 定理 2
- ^ Rosenkrantz & Stearns (1970, p. 246–247): 「」を使用して「または」を表すと、文字列セットには がありますが、各 に対してε フリー文法はありません。
- ^ ローゼンクランツ&スターンズ(1970年、254~255ページ)
- ^ ビーティ(1982)
- ^ ローゼンクランツ&スターンズ(1970、241ページ)補題5
- ^ Rosenkrantz & Stearns (1970, p. 242) 定理4
- ^ Poplawski, David (1977). 「LL正規言語の特性」. パデュー大学.
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ ab David A. Poplawski (1977 年 8 月)。LL 正規言語の特性 (技術レポート)。パデュー大学、コンピュータサイエンス学部。
- ^ コレンジャクとホップロフト (1966)
- ^ ab ホップクロフト&ウルマン(1979、p. 229)演習9.3
- ^ ローゼンクランツ&スターンズ(1970年、243ページ)
出典
- Beatty, JC (1982). 「LL(1) 文法と LR(1) 文法の関係について」(PDF) . Journal of the ACM . 29 (4 (10月)): 1007–1022. doi :10.1145/322344.322350. S2CID 14700480.
- ホップクロフト、ジョン E.、ウルマン、ジェフリー D. (1979)。オートマトン理論、言語、計算入門。アディソン・ウェズリー。ISBN 978-0-201-02988-8。
- カーニハン、ブライアン W.、リッチー、デニス M. (1988 年 4 月)。プログラミング言語 C。プレンティス ホール ソフトウェア シリーズ (第 2 版)。イングルウッド クリフス/ニュージャージー: プレンティス ホール。ISBN 978-013110362-7。
- Korenjak, AJ; Hopcroft, JE (1966)。「単純な決定論的言語」。IEEE Conf. Rec. 7th Ann. Symp. on Switching and Automata Theory (SWAT) 。IEEE Pub. No. Vol. 16-C-40。pp. 36–46。doi :10.1109/SWAT.1966.22。
- Parr, T.; Fisher, K. (2011). 「LL(*): ANTLR パーサー ジェネレーターの基礎」(PDF) . ACM SIGPLAN 通知. 46 (6): 425–436. doi :10.1145/1993316.1993548.
- Rosenkrantz, DJ; Stearns, RE (1970). 「決定論的トップダウン文法の特性」.情報と制御. 17 (3): 226–256. doi : 10.1016/s0019-9958(70)90446-8 .
- Waite, William M.; Goos, Gerhard (1984)。コンパイラ構築。コンピュータサイエンスのテキストとモノグラフ。ハイデルベルグ: Springer。ISBN 978-3-540-90821-0。
さらに読む
- シッポ、セッポ。ソイサロン=ソイネン、エルジャス(1990)。解析理論: LR(k) および LL(k) 解析。シュプリンガーのサイエンス&ビジネスメディア。ISBN 978-3-540-51732-0。
