SQLライクな言語を出力するDSLを作成する必要があります。まず、再帰的な降下パーサー+単純なコード生成アプローチを使って私自身のトランスヒーラーをロールしてみた。しかし、DSL言語が本当にシンプルで、出力言語も単純なので、私はCプレプロセッサのより強力なバージョンのように、時間とエネルギーを消費するアプローチを見つけようとしました。最初に心に浮かんだのはm4だった、私は以前に聞いたことがあるだけで、今までそれを使ったことはなかった。私はいくつかのチュートリアル/ドキュメンテーションを読んでいますが、私はこのツールで私の目標を達成できるかどうかまだ分かりません。例えば Iターン希望:SQLライクな言語を作成する良い選択肢
display a,b,c if a.substring(0, 3) == b.substring(0, 3) and (c + 8 > 20 || c == 0)
はそのような何かに変換します:
SELECT A, B, C from tbl where substring(A, 0, 3) = substring(B, 0, 3) and (c + 8 > 20 or c = 0)
だから私は、これを実現するための良い方法は何ですか?私は自分のコンパイラの実装をやっているほうがいいですか?
あなたのDSLは自明いくつかの他の言語に翻訳した場合、それは価値の多くを追加していません。その言語で書こうと思っていたものを書いてみませんか?翻訳が些細なものでなければ、些細な "transpiler"フレームワークを選択しても翻訳を実装することはあまりありません。私はあなたがパーサーを避けることができない(したがって、M4は答えではない)ことが分かり、パーザだけでは不十分であることを発見すると思います。 http://www.semdesigns.com/Products/DMS/LifeAfterParsing.htmlを参照してください。 –