2016-03-23 6 views
1

コンセプトに関するいくつかの考えを尋ねます:Domain ObjectSemantic Modelです。文法のセマンティックモデル

だから、Domain Object/Semantic Modelが何であり、何がDomain Object/Semantic Modelでないのか本当に分かりたいです。

私が知ることができたところでは、grammarはこれらの分離の概念を実行することをお勧めします。

しかし、私はそれをどうやって行うのかよく分かりません。たとえば、このわずかな文法を考えると、Domain ObjectまたはSemantic Modelをどのように構築しますか?

それは、書籍のほとんどはASTを通過するためには、このアプローチを示唆して...私は把握しようとしているまさに

です。同時に直接翻訳するのではなく、ASTを実行してセマンティックモデルを作成し、それにインタープリターを接続します。

例(SQL構文木):

代わりの直接SQL文を生成するには、私はセマンティックモデルを作成し、私はSQL文にこのセマンティックモデルを翻訳通訳をconnentすることができますよ。

Abstract Systex Tree -> Semantic Model -> Interpreter 

このようにすると、Transact-SQLインタプリタとSqLite用の別のonrを持つことができます。

+0

これは本当にわかりません...あなたは何をしたいですか?ドメインオブジェクト/セマンティックモデルとはどういう意味ですか?私はANTLR4の本でこれらの用語を見たとは思わない... – cantSleepNow

+0

私は少しポストを詳述しました。 – Jordi

答えて

1

「ドメインオブジェクト」と「セマンティックモデル」という用語は、コンパイラに関する文献の標準用語ではないため、ランダムな回答がたくさんあります。

通常の構文解析に関連する用語は、「具体的な構文木」(文法規則の形にマッチする)、「抽象構文木」(偶発的な詳細が含まれない木を作成しようとする試み、although it might not be worth the trouble.)です。

Parsing is only a small part of the problem of processing a language。あなたは構文を意味論的に解釈する必要がありますが(AST、CST、...)、それを表現します。 ???それは

  • タイプ解像度(すべての識別子/発現/構文構築物について、何がそのエンティティの種類で使用定義されているすべての識別子のため

    • 名前解決(
    • :これは、以下のような概念を含みます
    • 型チェックは、(有効な方法で使用したシンタックス構造である?)(プログラム部品で実行されるどのような順序、おそらくは動的/パラレル/制約決定)
    • 制御フロー解析
    • データフロー解析(消費された値は定義されていますか?)
    • 高性能または低レベルの抽象化で、いくつかのniceプロパティを持つ他の意味的に同等のセットによるシンタックス構造のセットの置き換え[コンパイルが一般的に速く実行])
    • 高レベルのコード生成、言語の構文構文をターゲット言語[しばしばアセンブリ言語のような]言語の同等のセットに変換する。

    これらの概念のそれぞれは、上記のものの上に構築されます。

    "セマンティックモデル"に最も近いのは、その高水準コード生成です。それは木の上に構築しなければならない多くの機械を必要とします。

    ANTLRが解析します。あなたは/残りの部分を供給しなければなりません。

  • +0

    お返事ありがとうございました。私が知ることができるように、書き出したものはすべてASTを通過すると同時に指摘することができます。それにもかかわらず、いったんASTを終えると、各文の内容を表現することをお勧めします。セマンティクスを定義/記述するモデルです。同意しますか?明らかに、DSL(つまり単純なドメインクエリ言語)の方が本当に簡単です – Jordi

    +0

    「書いたものはすべて、ASTを通過すると同時に指摘することができます」あなたがそれを信じるならば、あなたはキャラクターを通り抜けるのと同じことができます。なぜなら、ASTはそれに由来しているから、それは明らかにナンセンスです。 ... –

    +0

    いくつかの「モデル」のポイントは、重要なことを明示的に表現することです。完全なセマンティクスをキャプチャしたい場合は、1)テキスト/ AST /などを解釈する必要があります。モデルをシンボルテーブル/タイプチェック、フローグラフのコレクションとして抽出する、または2)プログラムを他のいくつかの(低いレベルの言語に)翻訳し、翻訳された結果を(完全な)意味モデルと呼ぶ必要があります。後者の場合、ソース言語のセマンティクスをより明確にするために、おそらくより単純なターゲット言語のセマンティクスを考慮しています。 DSLはこれをより簡単にしません。 –