DSL / Grammars and Syntax


DSL

Grammars and Syntax

一言要約

  • 構文だけでなく、文法による意味論の扱いに注意する必要がある。

要約

  • 言語の構文を使うとき、重要なツールは文法です。
  • 文法は、製造ルールのリストから成り立っています。そのようなルールは、用語と文をどう分解するかを持っています。それで、次のような追加の文のための文法を利用するかもしれません。
additionStatement := number '+' number
  • これは、言語の文が'5 + 3'であれば、パーサーが追加の文として認識することができることを、私たちに教えてくれています。
  • 言語を定義する文法は複数あり得ることに気付くことは重要です。
  • 文法は、言語のために生成された構文のツリーの構造で定義されています。そして、私たちは言語のテキストの特定の部分のための多くのツリー構造を認識することができます。
  • 文脈"5 + 3"によると、"8"か"53"を意味します。構文は同じですが、意味論は異なります。
  • 意味論モデル(Semantic Model)の意味論の定義の議論を要約すると、構文ツリーから、どうやって意味論モデル(Semantic Model)に値を投入するか、そして、なんの意味論モデル(Semantic Model)で合せるか、ということになります。
  • 外部DSLを利用するのであれば、特に構文直接翻訳(Syntax Directed Translation)を使うのであれば、パーサーの組み立てで利用する文法を明示します。
  • 内部DSLであれば、文法を明示しなくてもよいです。しかし、それでもDSLのための文法の用語を考えることは有益です。文法は、あなたが利用するであろう様々な内部DSLのパターンを選ぶことを手助けしてくれます。

ファウラーへのフィードバック

担当者のつぶやき

  • 前後の流れをうまく読みきれていない形の訳となっているため、この章の流れとしてあっているか心配です・・。あと、1週間前に終らせるTRYが未達になってしまいました。すいません。(瀬賀)

みんなの突っ込み

  • 「言語が複数の文法で定義されていること」ではなく、「言語を定義する文法は複数あり得ること」だと思われます。 -- kentaro714? 2009-10-31 (土) 03:45:33
  • 意味論モデルを使うと、意味論の定義は「構文木からどうやって意味論モデルを組み立て、それで何をするか」と要約できます。 -- kentaro714? 2009-10-31 (土) 03:50:31
  • 外部DSL、特に構文主導の変換(Syntax Directed Translation)を使うなら、パーサーを構築する際に、文法を明示的に利用することになるでしょう。 -- kentaro714? 2009-10-31 (土) 03:52:21
  • 最後の段落は、内部DSLでは文法が2種類あるのがトリッキーだと言っていますが、別のトリッキーでもなんでもないような…。 -- kentaro714? 2009-10-31 (土) 03:54:58