中国電子科学技術大学のコンパイル原則に関するレビューノート (4): プログラミング言語設計

目次

序文

ハイライト

言語の定義

比較: 意見の生成と意見の特定

セマンティクスはどのように記述されるべきでしょうか?

記号文字列

文字列のセット

⭐文法(超重視)

意味

構成

特急

⭐分類(キー) 

文法によって作られた言語

⭐フレーズ、直接フレーズ、ハンドル (文法分析のために探します)

⭐構文木(導出木)

言語設計

この章の演習

章のまとめ


序文

この復習ノートは、私の最終復習とクラスメートへの参考のために、張先生の教室 PPT に基づいています。


ハイライト

この章は、正式に編集原則の焦点である文法部分に入り始めます。 


言語の定義

  • 言語 = 構文 (ルール) + セマンティクス (ルール)
  • 文法: プログラムとそのコンポーネント (文法単位) を構造化するために使用される規則の集合
  • セマンティクス: 文法的に正しい文法単位の意味を指定する一連の規則
  • プログラミング言語は、コンピューターによって実行されるアルゴリズムを記述するために使用される形式的な表現です。
  • 字句規則: 言語の有効な記号を構成できる文字のシーケンスを指定します。
  • 文法規則: 一連の記号が文であるかどうかを判断し、文の構造を提供します (合法かどうかを判断します)。
  • 生成された観点: 各行は文法規則と呼ばれ、文法は文法を形成できるすべての文の集合です。
  • 認識の観点: 構文図を使用して特定の言語を定義し、各非終端記号と対応する生成が構文図に対応します。

構文図で認識できるすべての終端シーケンスの集合という観点で言語を認識します。

比較: 意見の生成と意見の特定

セマンティクスはどのように記述されるべきでしょうか?

これまでのところ、典型的な記述ツールはなく、多くの言語は依然として自然言語を使用してセマンティクスを記述しています。

記号文字列

記号列の概念を導入する必要があり、その後の知識が基礎となります。そうしないと、質問さえ理解できない可能性があります。

基本的な考え方

  • x と y が記号文字列で、x が abc、y が edf、xy が abcdef であるとします。この動作を記号文字列の接続と呼びます。
  • 記号列zがkk...kkの場合、z=k^n、つまりkがn回繰り返されると記録されます。
  • 特に、n=0 の場合、z=ε(空の船、値記号なし); k=pq、z=pqpq...pqpq の場合

文字列のセット

例を挙げて簡単に説明します。

特に、A^0={ε} であり、文字列セットの接続には順序が必要です。


⭐文法(超重視)

意味

文法とは、言語の文法構造を記述する正式な規則です。

文法の重要な特性:有限の規則が無限の言語を記述する 

構成

明らかに、文法には4 つの要素が含まれています:終端、非終端、開始記号、および生成 .非終端記号を表すには大文字を使用し、終端記号を表すには小文字を使用し、文字列を表すにはギリシャの小文字を使用することに同意します 

演出は省略することができ、左側が同じ場合は右側を「|」記号で区切ることができ、orを意味します。

特急

文法を説明するには、一連のプロダクションを直接与えるだけです。

例: 算術式文法 G0: (最初の式の 2 番目の項目は ET である必要があります。教師が間違えました)

⭐分類(キー) 

①タイプ0文法(フレーズ文法)

生成は α→β の形式になります。ここで、α は少なくとも 1 つの非終端を含む文字列、β は任意の文字列です。

② タイプ 1 文法(文脈依存文法)

タイプ 1 文法はタイプ 0 に制限を課し、左側の長さが右側の長さよりも小さくなければならないこと、つまり、文字列に置き換えられる非終端記号が存在する必要があり、生成形式は αAβ である必要があります。 →αγβ。

本質的にはA→γですが、前後のαとβに制限があり、この2つの文字列の間でしか置換できません(コンテキスト環境)

第2種文法(文脈自由文法)

生成はA→αの形になっています。タイプ2文法が文脈の制約を取り除いていることがよくわかります。左側に非終端があれば文字列を置き換えることができます。このようなものなので、文法は基本的にプログラムを記述することができ、文脈自由文法は多くの場合、略して文法です

④ タイプ3文法(正則文法・右線形文法)

生成式は A→α または A→αB (A と B は非終端記号、α は終端文字列として定義されます) の形式になります。つまり、置換後、左側は端子記号は右側のみ変更可能です。

文法によって作られた言語

導出と仕様

  • 直接導出: プロダクションの左側をプロダクションの右側に直接置き換えます。
  • Derivation: アスタリスク付きの二重矢印は、右側の文字列が0 回以上の導出後に取得されることを示し、プラス記号付きの二重矢印は、右側の文字列が少なくとも 1 回の導出後に取得されることを示します
  • リダクション: 導出の逆 
  • 左/右導出: 毎回左端/右の非終端を置き換えます。右端の導出は正規導出とも呼ばれます。

文型と文章

  • 文法開始記号から派生した文字列に非終端文字が含まれている場合、これは文です。文字列に終端文字のみが含まれている場合、それは文です。
  • 終端記号のみを含む文型は文です。
  • 文は文型である必要がありますが、文型は必ずしも文であるとは限りません
  • 文法 G によって生成されるすべての文の集合を、文法によって生成される言語 L(G) と呼びます。
  • 2 つの文法は、同じ言語を生成する場合、同等であると言われます。

質問例:言語を求めています(記述式質問)

 

 

⭐フレーズ、直接フレーズ、ハンドル (文法分析のために探します)

段階

 

直接的な表現

 

 

上記の注意事項は、フレーズが直接フレーズであるかどうかを判断するために使用でき、すべての表現の右辺を見つけるだけで済みます。 

フレーズと直接フレーズを理解する

 

ハンドル 

文型の左端の直接句を文型のハンドルと呼び、以下の例が挙げられます。

プライムフレーズ 

ターミネータを含むフレーズとその適切な部分文字列にはこのプロパティはありません (プライム フレーズの部分文字列はターミネータを含むフレーズではありません)。

⭐構文木(導出木)

  • 文法ツリーは導出過程をグラフで表現しており、文法ツリーの本質は導出過程であるため、文法の各文型(文)には対応する文法ツリーが存在します。
  • 導出ツリーの端 (構文ツリーのすべての葉ノードの左から右への接続) が文タイプ (文) です。
  • 文に 2 つの異なる構文ツリーがある場合、文法があいまいであると言います。
  • 派生ツリーを通じてフレーズ/直接フレーズ/ハンドルを決定することもできます。構文ツリーのサブツリーと単純サブツリーはフレーズと直接フレーズに対応しており、最も左の単純サブツリーは当然ハンドルです。
  • 文法ツリーに n 個の内部ノードがある場合、n 個のサブツリー、および n 個のフレーズが存在し、m 個の直接サブツリー (父と子の 2 世代のみ) には m 個の直接フレーズがあります。

:

 


言語設計

それは実験に反映され、調査されません。


この章の演習

 

 


章のまとめ

フレーズ、直接フレーズとハンドル、プライム フレーズ

構文ツリーの概念、フレーズへの接続、構文ツリーの描画 

おすすめ

転載: blog.csdn.net/m0_59180666/article/details/130876999