文法と内容
コンパイラの理論ノート、リファレンスの内容の第二部:ソフト北部学部少ビング教室の教材やコンテンツ、張リー「コンパイラの理論とコンパイラの構築」、防衛産業出版社「コンパイラ理論-研究ガイドと典型的な問題を解決します」 、AlvinZHの研究ノートと個人的な理解
現在のバージョンは、Liteのバージョンと見直し知識を起動しますフォローアップの内容全体を含めることです
エラーやミスがコメントでその提案を歓迎するか、私に連絡した場合:QQ:847590417
カタログを読みます
この章で
キー:制限記号列、記号の文字列の集合、曖昧な文法、言語、再帰、フレーズ、ハンドル、構文木、文法、文法、BNF表現分類文法、構文図、文法を計算します。
2.1言語の基礎を形成します
A、アルファベットや記号の列車
アルファベット:記号の空でない有限集合
記号:アルファベット要素
記号列:記号の有限列にスプライス
ヌルシンボル列:記号列の兆候
定義されたシンボル列の形式では:
アルファベットPを考える:1ヌルシンボル列は、シンボルPの文字列であり、2×シンボルPの文字列であり、aはアルファベットの要素、斧またはXAである場合(左することができ、右であってもよいです。 1つだけを追加することができない)P上に(シンボルがシンボル列、スプライス[イプシロン]である)記号列である場合にのみ(IFF)yは1およびコンプライアンスである場合3.y Pは、記号列であります2.記号列。
第二に、記号列の記号列と操作のセット
1シンボルのストリングがに等しい: X、Yは、シンボルの2つの文字列がセットにある場合は、X = YIFF各シンボルxの各シンボルの組成及びyが順次同じ組成です。
2.記号列の長さ: | X | xはシンボル、長さxの文字列であるシンボルの数に等しいです。(ヌルシンボルの0ランレングス)
3.連結記号列は: Xは、Yがシンボル列Pに定義されている場合、xとyのXYをP記号列に連結されて、記号列は、左または右の空の文字列の両方において、YXをxyがに等しくありませんシンボルの文字列に結合することは同じです。εx=Xε
4.記号列のべき乗:と仮定Xは、それが自己スプライシングべき乗シンボルのストリングである、0回のシンボルの空の文字列に等しく、双方のn乗は、それ自体をn回繰り返します
シンボル列セットの積演算:想定A、Bは、シンボルの文字列の集合であり、次いでAB Aは、カップリングBのように、参照符号の最初のセットに等しく設定されます。
前記べき乗シンボル列セットは:シンボルAの文字列の集合があると、ゼロ-Aは、セットを備えているシンボルだけ空の文字列のパワーであり、n結果得られたスプライスN-Aの電源です。N-1電力はN Aを算出するスプライシングの計算に使用することができます。
7.閉鎖操作シンボル列車セット:記号の文字列の集合とし、次のようになります。
正閉鎖:
閉鎖:
クロージャが、正の閉鎖よりもシンボルの空の文字列を持ちます。
どのように記号を使用してプログラムを取得します:
Aは、文字列の基本的な言語です。
Bは、言語の単語の集合であります:
それはAの全ての結果から抽出されるため、閉鎖A、Bが属しています
そして、声明で言語の文は、B内の記号列であります
C言語の文の集合とし、その後、Cはまた、閉鎖Bに属し、また、プログラムCに属し
文法2.2のノンフォーマルな議論
文法:も構文として知られている構造とルールを記述するために使用される形式言語から言語の構造体の定義と説明。
文法規則:「:: =」所定のシンボルに置き換えられ、一般的には、文の文法構造を記述するために一連のルールを確立し、「の...からなる」ことで、次のような構造の基本的な構文は次のとおりです。
文を使用してルールを導出する:以下のようにルールと、文章を導出または生成するために特定の方法でそれらを使用することができますから、代わりに規則によって各ルールの左および右の部分から、即ち、認識されるべきシンボルに由来する開始導出は、派生ルールを使用して、右にそれぞれの時間を残しました。
例:
すべての派生非終端記号まで、最後まで交換します。
この導出は、このそこ右端の導出に加えて、左端の派生と呼ばれています
認識はない良い左端導出ないだろう。
<文>から派生した文の完全な導出は次のように書くことができます。
これは、以上の説明から明らかですが、文の構造の文法定義および説明は、形式でセマンティックの問題を伴うことなく、それがこの魔法の文章、いくつかのピーナッツピーナッツを食べることができます。
構文木:文の構文の記述のツリー構造:
2.3文法およびフォーム定義の言語
2.3.1定義された文法
定義:文法G =(VN、VT、P 、Z)(文法)
VN:非終端セット(非終端語彙)
VT:終了記号の集合(V =Vn∪Vtは、文法、語彙テーブルと呼ばれる)(端子)
P:セット(原理)又はプロダクションルール
シンボルZ(識別コード)を起動Z∈Vn
ルール:順序対(U、x)は、xが通常書き込まれる又はU :: = U→X(:: =→等しい)、Uの長さは1であり、xは0以上の長さ。U∈Vnは、X Vは閉鎖を属します。
符号なし整数、例えば、文法。
G [<符号なし整数>] =(VN、VT、P、Z)
VN = {<符号なし整数>、<数値文字列>は、<番号>}(ルールの左側が起こり、シンボルのセットを分割し続けることができます)
VT = {0,1,2,3、... 9}(シンボルのセットを分割し続けることができない残り)
P = {<符号なし整数>→<数値文字列>
<数値文字列>→<数値文字列> <番号>
<数値文字列>→<番号>
<番号>→0
...
<番号>→9}(変形規則は、シンボルセットを分割してもよいです)
Z = <符号なし整数>(開始シンボルスプリッタ)
一般的に角括弧では非終端角括弧はならない、実際には、区別するための非終端記号、および終端記号を囲みます。
左側のシンボル・コンフィギュレーション・セットのVn、及びZ∈Vnに(要素Pで)生産
生産は同じの左部分を持っているときに、記号、一緒に撮影することができます|画定
文法BNF表現(BNF)の両方として
文法、生産の実際にだけ与えられた集合が与えられると、最初(左ルールのため、通常最初の兆候規則)に識別記号を指定します
文法:
:: = |、<と>(に拡張されていないメタシンボルと呼ばれるメタ記号2.7メタ員手話と呼ばれる言語で構成される拡張メタ記号を導入される)は、他の言語を記述するために使用することができます言語。
フォームで定義2.3.2導出
定義:DERIVATION:文法G:V = xUy、W = xuy( ゼロステップ導出)
式中、X、y∈V*(X、Y、または非終端記号を終端またはヌル)、UのVn(非終端)に属する、UはVに属します*
(U :: = U)∈P場合、Vは、Vに直接W還元(:: =等しい→)、vはwを導出することができ、wは文法Gに従って導出することができます
X = Y =ヌルシンボル列であれば、そこにU :: = U、UがUと略記文法G又はに従って導出することができるuが(Gを省略してもよい)Uを導き出せます
例:
定義:1は、暗黙的に派生:プレゼンス文法G、U0、U1、...、国連属する正閉鎖Vがあります
= U0 U1が複数回に文法Gに従ってVを導出することができる場合には、Gを順次アン= Wに応じて誘導されます。(プラス記号持っている必要がありますが、間接的に派生したシンボルです)
Vを導出することができ、それは、W文法Gに従ってnは言った:この配列は、n番目の由来と呼ばれています
例:
定義:間接導出:プレゼンス文法G、V、W N閉鎖Vに属するがあります
:vが正の場合には、文法G、またはV :: = W、すなわちWまたは組成物のV wがV Gはタイミングを導き出すことができるwを推定することができる(直接導出由来プラスn回)
定義:カノニカル派生::と呼ばれる、yはVtの閉鎖を属している場合、本明細書が導出され、xUyのxuyが推論できる右端一定で不変の記号列のいずれかの端部のみが含ま必要(シンボル、どちらか空)。
それぞれの文はなく、すべての文章は、文の文章をエクスポート呼ば標準化された仕様で得られた正規の導出を、持っている、標準的な導出を持っています。
派生記号の様々な:
右端の導出:つ以上の非終端記号列が右(正準微分)である場合は最初の導出、すなわち左端の導出は左側にあります。
2.3.3正式な定義言語
定義:文法G [Z]
(1)文:xは文<=> Z閉鎖は、xを導出することができるであり、xは、V *である(非終端記号が有していてもよい、ターミネーターがあってもよいです)
(2)文:xは文である<=> Zは、閉鎖を誘導することができるが、Xであり、xはのVt *(言語の最小単位は、終端記号からなる記号列)であります
(3)言語L(G [Z])= {X |x∈Vt*、Z多段推定X}、言語は、すべての文から構成されています。
既知の言語の文法を導出することによって得ることができます
形式言語の文法構造、文法や言語が多くの場合にこの方法が知られていません
例:
定義:これに対応した同じ2つの異なる言語の構文文法、彼らは同じ文法です
コンパイル時のケアは、実際には文法記号列が指定された言語に対応するかどうかを判断するために、記号や文法の文字列に基づいています。
2.3.4再帰的な文法
無限の可能性
1.再帰ルール:右部分と同一の記号の左側部分を支配
Uの:: = xUy、xはシンボルの空の文字列、すなわちUであれば:: = UY、両方左再帰左側不変; YはUである:: = XU、右再帰空記号列、ない場合は空のXY 、Uは:: = xUyは、セルフフィットと呼ばれます。
文法が含まれている場合は、少なくとも再帰的ルールがあり、文法は、直接再帰と呼ばれています。
ルールは以下のように::間接再帰Uです:: = Vxと、V :: = UYとき| X、Uは独自のを取得します。
2.再帰文法:文法Gは、U∈Vnを存在します
nは... U Uを推定することができる場合はUを導き出すことができる... N Uは...右である場合、Gは、再帰的な文法を残っている場合、Gは、(埋め込まれた再帰から)再帰的文法であります再帰的な文法。
欠点は、左:あなたはトップダウン手法で解析することができない、それは無限ループになります。
再帰的な文法の利点:利用可能な有限のルール、無限の言語の定義。(右再帰的な文法規則は、13すべての符号なし整数を使用して定義することができる符号なし整数文法です)
2.3.5文の語句、簡単なフレーズとハンドル
定義:語句や簡単なフレーズ
文法G [Z]、文の文法であり、W:= xuy wは(xyは空であってもよい、uが空ではありません)
文法はxUy、(Uは非終端である)に由来することができる場合、Uは、マルチステップuを導き出すことができ、その後、U文に対してW Uがフレーズである(それが起動非終端位置に文章であっても記号列)
(U N閉鎖Vに属するは、非終端記号は、フレーズがシンボルであっても、空ではなく、ターミネーターことができ)
U場合Uは直接導出することができ、次いで、Uは(別名直接語句)wは相対単文フレーズUです。
定義:ハンドルの文と呼ば左端の簡単なフレーズのいずれかのタイプは、ハンドルは、ボトムアップ構文解析で非常に重要です。
再び説明:
フレーズ:抽象構文木に文の後、シンボルノードの後続ノードの文字列で各リーフノードが(リリースリリース非終端記号によって識別される)意味のある最小単位となります。
シンプルなフレーズ:抽象的な木の変換は、子ノードは、式からなる他のリーフノードは、記号列で導入することができません。
ハンドル:左端の簡単なフレーズを。
フレーズは、簡単なフレーズが文の条件を基準とし、矩形は複数のフレーズ、シンプルなフレーズが、唯一つのハンドルを有することができます。
2.4構文木とあいまいな文法
ツリー:ルートノードに加えて、各リーフノードは、唯一の即時の前任者を持つことができ; nは、直接後継
構文木:文の構造を示す表現は、ノードからなる有向グラフであり、エッジが持っています。
ノードシンボルであり、シンボルはルートノード(開始)を同定することで、中間ノードは、非終端記号であり、リーフノードは、端末又は非終端記号であってもよいし、どちら側のノードとの間の派生関係は、一般に、あります子ノードのルートからデフォルトの端を指すがあります。
サブツリー:最後に生成されたルートノードの子構文木に構文ツリー内のノード。
サブツリーやフレーズ:左から右への順序によってサブツリーのエンドノードは、シンボルの文章列、語句のサブルートに対する文のシンボル列(INこれはサブツリーでありますルート打ち上げ)。
導出と文は、構文木を生成しました
G [Z]、文wを与えられました。誘導された配列は、確立されてもよい:Z wは文法Gに従って導出することができる場合、構文木を確立することができる:Zツリールート、生成された構文木を導出する、各工程を。
注:文の文法を生成することができ、導出の異なる原理を使用して導出することができます。法律を生成異なる構文木が、生成された最終構文木の同じ形状は、すべての文法は、このプロパティを持っていません。
シンボルの左端に最初のノードを導出するステップと、右端の導出:最初の右端、左端導出深さ派生:構文木は、3つの一般導出があり誘導されます。
1.構文木構造から推定:
識別コードから始めて、→右から左に推定配列は、上から下に構文木を確立し、ルートノードから始まる設立しました。
2.コンフィギュレーションは、構文木から導出されます
まず、ボトムエンドノードサブツリーの剪定は、木全体のカットまで、それぞれの時間規程に一度カット:文の先頭から、徐々に右に左法律は、あなたが推定配列を構築することができるので、各ステップを彼らは、現在の文ハンドルの削減です。
定義:ハンドルで行われた文の規程は、標準的な法令(左端の減少)と呼ばれます。
定義:文の仕様や仕様を導出することによって得られた文仕様の規程と呼ば
2.4.2あいまいな文法
定義:文の文法2本の異なる構文木がある場合は、文法は、曖昧な文法で、それ以外の場合は、明確な文法です。
例:
その構文木は異なります。
定義:文の文法は、2つの異なる標準的な派生がある場合、文法があいまいです。
別に上記トップダウン決意曖昧な文法からもボトムアップビューであってもよいです。例えば、上記の例では:E + E *私です+私は2つの仕様の法令によって得られたが、同じ文章E + Eのために*私、彼は別の2に対応する二つの異なったハンドルを有します(*構文木:iとE + E)。したがって、曖昧さは、文の構文ハンドルが一意でないことを意味します。
定義:文法仕様ハンドルの文は、(低下させることなく2つの仕様があります)一意でない場合、文法はIIあいまいです。
コンパイル時にあいまいさが不確実性とあいまいな文法を作成することは文法が曖昧であるかどうかを判断するためのステップの所定数の範囲内ではない、決定不能です。裁判官は文法があいまいで会うことができたときに溶液が、明確な十分条件として知られている制限を、提案されています。
これは、この原則に従った二つの方法で解決することができます。
1.コンパイルアルゴリズム変性条件は:例えば、所定の優先オペレータが曖昧な文法高いルック異なる優先順位を回避するために、同一の所定の方向の優先順位は、そのようには統一された派生されたとき。
条件は、直接文法を修正:修正文法規則を、直接還元シーケンスを制限します。
文の2.5分析
Vtの閉鎖に属するシンボルSの与えられた文字列を分析するとき、行うには、Sは、対応する言語構文かどうかが判断される記号列です。
2.6文法の実用的な限界
文法では、いくつかの不当なルールは表示されません。
有害ルール:たとえば、有害なルールのために:U :: = U、あいまいさを引き起こす可能性があります。
エクストラルール:
文法における文の(A)導出未満のルール(規則の左側部分は、内の任意の文に表示されていない非終端)
我々はルールを使用すると(2)文の導出の際に、任意の規則は、シンボルのストリングの端を押していない(規則がプッシュ非終端記号列の末尾が含まれていません)。たとえば、次の場合にはU上のルールとだけU :: =彼らはシンボルの文字列の末尾を起動することはできませんのでxUyが、それは、不要です。
圧縮文法:文法規則は、有害または不要なルールではありません。
余分なルールがあるかどうかを確認します。次の2つの条件は、各非終端U各文法規則の左部分を満たすかどうかを確認する必要があります。
すべて以外1非終端識別コードが、これは非終端文型に存在しなければならない(右)
2.すべての非終端、彼は記号列の末尾(シンボルの終わり)を導出することができなければなりません
2.7その他の文法表記
1.拡張BNF表記(バッカス正規形)
BNFメタ記号:<、>、:: =、|
拡張:<、>、:: = |、{、}、[、]、(、)
{}:右側のM、Tを含有するNは、tがm回繰り返されるシンボル列を示しN、MNは0に任意の回数繰り返し後の両方が省略され、省略することができます。内部でも使用することができます|表現または
[]:内部シンボル列不要、等しいブレースラップされたシンボル列mが1で表し、nは0であります
():抽出シンボル因子、例えばXY | XM | XN、Xのように書くことができる(Y | M | N)
2.構文図(グラフィック)
2.8文法と言語カテゴリー
正式な言語:説明オートマトンとの意味的な文法と言語
言語の定義:
文法定義:すべての文法は、4つのタプル、つまり、Vnは、Vtを、P、Zと定義することができます。
カテゴリーと言語の文法:タイプ0、タイプ1、タイプ2、タイプ3、生産上の聖歌にそれらの異なる制限を適用しています。
0タイプ:
ルールP:U :: = vが、uはV +に属することは非終端必要で、vが* Vに属し
L0は、句構造文法として、左と右の部分は記号列であると呼ばれる少なくともVnのシンボル列の右側の部分(空であってもよい)、許容されるチューリングマシンを備えているシンボル列を残しました。
タイプ1:
ルールP:UはVnが、X、Yに属する、請求xUy :: = xuy、Uは* Vに属し
チューリングマシンは、一個の線状の境界を受信し、自動的にだけxの文脈依存文法規則又はコンテキスト依存と呼ばれるL1、すなわち、U Uを書き換えるために、Yそのような文脈。
タイプ2:
ルールP:UはVnと、U所属Vに属する前記U :: = U、*
L2は、文脈自由文法、すなわち、UがUは関係なく、コンテキストの書き換えられ、等価BNFと呼ばれる、プッシュダウンオートマトンにより受け付けるようにしてもよいです。
タイプ3:
Pルール:U :: = T又は重量; Uは、Vnとに属するwは、Tは、バーモント。
正規文法、正規言語、定期的に、ほぼ直線的なノートのコレクションと呼ばれるL3は、両方ではなく、有限オートマトンによって受理されることができます。
説明:;例えば2型文法モデルは、文法型L1を生成することができない、文法L2、L3型文法を生成することができるL3は、L1、L2は、L0属する属する所属は、サブ文法文法の広い範囲を生成することができます。
文法の4種類の相互関係と判断する方法:
主な違いは、生産の左右の要件に異なる組成のルールの文字です。裁判官が始まったとき、それは最も複雑なタイプ3で始める必要がありますので、より多くの、3種類の0から文法タイプの4種類、そのルールや慣習、より多くの制約をクリア。
3 :(より多くの制限を入力:2つの文字の最大の権利を、そして唯一つの直線があります)
非終端だけ左
2つの文字の最大の権利は、左右の端部は、時間が終了しなければならない2つの非末端(左端と右端は、非線形、左、左端と右端は、非線形の権利です)
両方が存在しないことについての線形。
2 :(より多くの制限を入力します。左の必要が唯一の非ターミナル)
非終端だけ左
右側には、端末の数と非終端記号があります
制限:( 1つの以上のタイプ:非末端を持つ左必要)
少なくとも、左は非終端記号が含まれています
右側には、端末の数と非終端記号があります
コンテンツの変化を導出する左右が左から右に変更することができない、変更は空にすることはできません
0タイプ:
記号文字列は、少なくとも左の非終端ました
右側に無料
つまり、限り、それが記載されているように、それは0文法を入力するために属しています
知識の範囲内演習
言語の構文は、これらの規則のいくつかは、語彙規則正当なプログラムを形成するためのルールの設定され、他の部分は、構文規則(別名生成規則)です。
名前と識別子:識別子名が異なる言語仕様の識別子で構成されているが同じではありません。それらは形で区別することは困難であり、識別子は意味がないストリングであり、名前は明確な意味と性質であり、名前は、抽象記憶装置の代表とみなすことができます。
複数の言語は文法を推定することができます
文法や言語のみを推定することができます。言語の文法:多くの1つ
文法の異なるタイプの場合、そのルールはこれだけのルールに従わない見つける必要があり、その後、彼は文法のこのタイプに属していない、すべての生産作業のためであります
尋ねられたとき、人間は、そのような符号なし整数として、0-5の数字の文字列を理解することができればどのような言語の文法は、あります。こうした記述は、あなたは、文のコレクションのすべての要素を表現するために、コレクションを使用する必要ができない場合は文法の規則に従って導出されます。
非終端記号<>他の形態としては、例えば非終端大文字、小文字非終端区別することができる、増加は必要ではないが、区別するためにのみ使用されます。
文法に従って対応する言語を得、いくつかの質問がしやすいされている文法記述言語、文法型決意に応じて、その後の更新は、いくつかの印象的な技術を与えます