2012-07-17 18 views
5

私はSQLに変換できるドメイン固有の言語を持っています。私自身のレクサー、パーサー、コードジェネレーターを書く必要がありますか、それとも私に役立つツールがありますか?DSLをSQLに変換するための正しいツールですか?

+0

ドメイン固有の言語構文もSQLで解析する予定ですか? – alexm

+1

言い換えると、SQLの生成を行うホスト言語は何ですか? – alexm

+0

これは実際にあなたが使っている言語とあなたのDSLの複雑さに依存します。 –

答えて

0

それはあなたが仕様を受け入れ、そこから翻訳者を生成することを目的とイーライのようなもの、を探しているように聞こえる:一方

http://eli-project.sourceforge.net/

、あなただけのように幸せになるかもしれませんパーサーにANTLRのような素敵な世代のツールを書いて、ASTとコードジェネレータを自分でコーディングしてください。

おそらくSQLのような高水準言語を記述するコード生成は、DSLからの変換が簡単であると仮定すると、実装するのが難しくありません。

私がいたら、ocamllexとocamlyaccを使ってOCamlに書きますが、まずはOCamlを知る必要があります。

1

これは、使用する言語に大きく依存しますが、Groovy、Ruby、Scala、F#およびHaskellはこれを行うのに適した言語です。

どの言語を使用すると、どのツールを使用するかに影響します。

たとえば、Cでこれを行うことができますが、それはもっとうまくいくでしょうし、ユーザーにとっては見た目が悪いかもしれません。

一部の言語では、パーサーを支援するためにツールを使用する必要がありますが、ツールを使用しない方が優れています。

DSL件名のDSLをに掲載しています。

http://manning.com/ghosh/

1

あなたのDSLは、DSLコーダによる可読性のために設計されている場合は、[はい、あなたはレクサー、パーサとコードジェネレータを必要としています。

(あなたの「メタ言語」の構文でDSLをコーディングすると、これらのメカシャンは必要ありませんが、それは真実かもしれませんが、メタデータにDSLの埋め込み性を最適化し、エンドユーザーにとっての読みやすさよりもむしろ言語に頼っています。

いいえ、最初から書き込む必要はありません。

あなたのDSLの文法規則のコーディングに集中するのに役立つ、野生のパーサジェネレータ(YACC、Bison、ANTLR、JavaCC)がたくさんあります。解析エンジンとしての文法規則を処理/実行するために、多くの低レベルの構文解析機構を提供しています。 ANTLR/Bison/Yaccは、あなたが概念的な文法を特定のパーサジェネレータ(LALR(1)、LL(k)、...)の制限に縛る努力を費やす必要があります。これを行うには明示的な作業が必要です。その後、伝統的なパーサであなたは自分自身になります。

Life After Parsingがたくさんあるので、それはシンボルテーブル、コード解析(コード解析)です。ほとんどの人がそこに着くと驚くばかりになってしまいます(実際の言語のパーサーは、私たちのDMS Software Reengineering Toolkitは、文法エンジンの制約を最小限に抑えて構文解析ルールを構築するのに役立つように設計されています;自動的にツリーを作成したり、さまざまな方法でコード変換をサポートしています。さらに、DMSは、ソース/ターゲットパターンのペアを使用してマッピングを指定することで、構造化された方法でDSL(「自分の言語」)フラグメントとターゲットの間の変換をサポートするための視点とツールを提供します。 OPの特定の目的のために、SQL2011文法でDMSを得ることができ、ターゲットパターンを書くための素敵なベースラインを提供します。

ツールによる自動変換の詳細については、SO discussion on translating between languagesをご覧ください。

0

適切なメタ言語(Lispなど)を使用している場合は、レクサー、パーサー、コードジェネレータは必要ありません。すべてが既に含まれています - あなたはDSLをS式の上に構築することができます。あなたはLisp自身のコードのホスト部分を生成することができます。

あなたのDSLに特別な構文が必要な場合でも、パーサーをメタ言語に埋め込むのは非常に簡単です。

2

「The Pragmatic Programmers」シリーズのTerence Parr氏がこの本を読むことをお勧めします。Language Implementation Patternsそれは、構文解析、翻訳、コンパイルの徹底的な紹介です。例としてはANTLR by Terence Parrに大きく依存していますが、他の言語やシステムで利用できるように一般的です。

0

私はあなたに類似したプロジェクトを持っています。私はあなたがEclipseで直接使用できるので、XtextとXtendをチェックアウトすべきだと思います。あなたはintellisense、grammer、lexerを簡単に手に入れることができます。私はSQLコードを作成しようとしましたが、今までは成功したプロジェクトでした。

関連する問題