形式言語理論およびコンパイラ設計において、適応文法とは、文の構文解析や言語文字列の生成の過程で生成規則を変更できる形式文法の一種である。
固定された規則セットで動作する従来の文法とは異なり、適応型文法は、処理中の入力や文法の現在の状態に基づいて、規則を動的に追加、削除、または変更します。この自己修正機能により、適応型文法は文脈依存言語を認識および生成し、従来の文脈自由文法では煩雑または不可能な構造を必要とする、一致、スコープ、相互参照などの複雑な言語現象を処理することができます。適応型文法は、自然言語処理、拡張可能なプログラミング言語、および実行時言語変更を必要とするシステムで応用されています。
ジョン・N・シャットは、適応文法を、文法内で規則セット(別名、生成規則のセット)を明示的に操作できる文法形式と定義している。操作の種類には、規則の追加、削除、変更などがある。[ 1 ]
文献における文法適応性の最初の記述(ただしその名前ではない)は、一般的には1963年に発表された Alfonso Caracciolo di Forino の論文であるとされている[ 2 ] [ 3 ] [ 4 ] 。適応形式(拡張可能な文脈自由文法)に関する次に一般的に受け入れられている言及は、 1970 年に Wegbreitによる拡張可能なプログラミング言語の研究からであり[ 6 ]、続いて1973 年に Hanford と Jones による動的構文が発表された[ 7 ]。
ごく最近まで、適応文法の形式的特性に関する研究の多くは研究者間で連携が取れておらず、1990年にヘニング・クリスチャンセンがボリス・ブルシュテインによるACM SIGPLAN Noticesの論文[ 8 ]に応答して初めてまとめた[ 2 ] 。サンパウロ大学工学部には適応言語・技術研究所があり、適応技術と理論の研究と実践に特化している。LTAにはこの分野の研究者の名前を記載したページもある[ 9 ] 。
初期の取り組みでは、動的構文[ 7 ]、拡張可能[ 6 ] 、変更可能[ 10 ] 、動的[ 11 ]、適応可能[ 2 ] [ 12 ]文法が参照されていましたが、最近の使用法では、適応的(または文献の出版言語に応じてadaptativa [ 13 ] [ 14 ]などの変形) という用語の使用に傾いています。 [ 3 ]岩井は自身の形式主義を適応的文法と呼んでいますが[ 13 ]、単に適応的文法というこの特定の使用法は、現在では名前の修飾なしに文献で一般的に使用されていません。さらに、いくつかの研究者がこの方向で努力しているものの、さまざまな研究者の間で標準化や分類の取り組みは行われていません。[ 3 ] [ 4 ]
Shuttは適応型文法モデルを2つの主要なカテゴリに分類しています。[ 3 ] [ 15 ]
ジャクソンはシャットの分類法を改良し、時間経過に伴う変化をグローバル、空間経過に伴う変化をローカルと呼び、ハイブリッドな時間と空間のカテゴリーを追加している。[ 4 ]
適応型形式体系は、大きく2つのカテゴリーに分けられる。すなわち、完全な文法形式体系(適応型文法)と、適応型機械である。適応型機械は、一部の文法形式体系の基礎となっている。
以下は、上記のシャットの定義によれば適応文法とみなされる(あるいは、その考案者自身によって適応文法と分類された)文法形式の一覧(決して完全なものではない)である。これらは文献に最初に登場した順に並べられている。
1970 年の Wegbreit の博士論文[ 6 ]で説明されている拡張可能な文脈自由文法は、左端導出中に終端接頭辞を読み取る際に有限状態トランスデューサによって出力される指示に従ってルールセットが変更される文脈自由文法から構成されます。したがって、ルールセットは生成された文字列内の位置によって変化しますが、この変化は構文木の階層構造を無視します。拡張可能な文脈自由文法は Shutt によって命令文法に分類されました。[ 3 ]
1985年に生成文法[ 16 ]として初めて導入され、後にさらに詳細化された[ 17 ]クリスチャンセン文法(おそらくチョムスキー生成文法との衝突のため、シャットによってそう名付けられた)は、属性文法の適応的拡張である。クリスチャンセン文法はシャットによって宣言文法に分類された[ 3 ]。
二重言語以下のように実証されています。[ 17 ]
<program↓ G > → <dcl↓ G ↑ w > <body↓{ w-rule }>ここでw ルール = <body↓ G '> → w
<dcl↓ G ↑ ch • w > → <char↓ G ↑ ch > <dcl↓ G ↑ w > <dcl↓G↑<>> → <ε> <char↓G↑a> → a
1990 年 5 月に初めて導入され[ 8 ]、その後 1990 年 12 月に拡張された[ 10 ]修正可能な文法は、構文解析中に規則を追加および削除するメカニズムを明示的に提供します。ACM SIGPLAN Notices の応答に応じて、Burshteyn は後に自身の形式体系を修正し、1992 年に適応型ユニバーサル構文および意味解析器(USSA)を導入しました。 [ 18 ]これらの形式体系は Shutt によって命令型に分類されました。[ 3 ]
1993年に導入された再帰適応文法(RAG)は、文脈自由文法の優雅さの多くを維持しつつ、チューリング級に強力な形式体系を導入しようとする試みでした。[ 3 ] ShuttはRAGを宣言的形式体系として自ら分類しています。
1994 年に導入されたBoullier の動的文法[ 11 ]は、構文解析の時間連続体の概念を文法形式体系自体の表記の一部として厳密に導入した最初の適応文法ファミリーであると思われる。[ 4 ]動的文法は文法のシーケンスであり、各文法G iは時間の経過とともにシーケンス内の他の文法と何らかの点で異なっている。動的文法に関する Boullier の主要論文では、これらの文法に対して構文解析を実行する機械である動的パーサーも定義されており、彼の形式体系が、型チェック、拡張可能な言語、多相性、および通常プログラミング言語翻訳の意味領域にあると考えられるその他の構成要素をどのように処理できるかの例が示されている。
2000年の岩井の研究[ 13 ]は、適応型オートマトンを文脈依存文法に適用することで、Neto [ 19 ]の適応型オートマトンをさらに発展させたものである。岩井の適応型文法(名前の修飾語に注意)は、構文解析中に3つの操作を可能にする。 ?クエリ(構文述語といくつかの点で似ているが、変更が選択される規則の検査に結びついている)、+追加、および-削除(これは前身の適応型オートマトンと共有されている)。
2000年に導入され[ 20 ]、2006年に最も詳細に議論された[ 4 ] §計算(§はメタエスと発音される)は、文法内の生成規則の明示的な追加、削除、変更を可能にするだけでなく、構文述語も提供する。この形式体系は、作成者自身によって命令的かつ適応的、より具体的には時空間適応文法形式体系として分類されており、さらに他の研究者によって分析形式体系として分類されている[ 14 ] [ 21 ]。
二重言語以下のように実証されます。
文法 ww { S ::= #phi(AX<-"") R; R ::= $C('[ab]') #phi(AX<-AX C) #phi(N<=AX) N | R; };(表記に関する注記:上記の例では、#phi(...)文は生成規則Rの中で文法を明示的に変更する箇所を示しています。は時間的なグローバルな#phi(A.X<-A.X C)変更を表し、 は空間的なローカルな変更を表します。生成規則S内の は、Rによる参照の前に空文字列を配置することで、AXというグローバルな生成規則を実質的に宣言しています。)#phi(N<=A.X)#phi(A.X<-"")
2001年にNetoによって初めて記述された適応型デバイス[ 22 ]は、その後2003年にPistoriによって改良および拡張された[ 23 ]。
2002年に[ 24 ]アダム・カーミは、Adapserとして知られるLALR(1)ベースの適応文法形式を導入した。形式の詳細については公開されていないようだ。
2004年、[ 14 ]セザール・ブラボーは、外観チェックの概念[ 25 ]と適応的文脈自由文法(岩井の適応文法[ 13 ]の制限された形式)を融合するという概念を導入し、外観チェック付き適応的文脈自由文法と呼ばれるこれらの新しい文法がチューリング強力であることを示した。
以下に挙げる形式体系は、文法形式体系そのものではありませんが、完全な文法形式体系の基礎となるもの、あるいは適応性を持つためここに含められています。これらは文献における初出順に並べられています。