C / C ++コードに直接埋め込むことができるマークアップコード(xmlやhtmlなど)を作成するためのメタ言語を作成しようとしています。これはこの言語で書かれた簡単なサンプルです。私はそれをWDI(Web開発インターフェース)と呼んでいます。
/*
* Simple wdi/html sample source code
*/
#include <mySite>
string name = "myName";
string toCapital(string str);
html
{
head {
title { mySiteTitle; }
link(rel="stylesheet", href="style.css");
}
body(id="default") {
// Page content wrapper
div(id="wrapper", class="some_class") {
h1 { "Hello, " + toCapital(name) + "!"; }
// Lists post
ul(id="post_list") {
for(post in posts) {
li { a(href=post.getID()) { post.tilte; } }
}
}
}
}
}
基本的には、html用のユーザーフレンドリーなインターフェイスを備えた変更されたCソースです。ご覧のとおり、従来のタグベースのスタイルは、中括弧で区切られたブロックを使用したCのようなコマンドに置き換えられています。このコードをhtmlに変換し、後でコンパイルできるようにCに挿入するインタープリターを作成する必要があります。C部分はそのままです。wdiソース内では、プリントを使用する必要はありません。すべてのreturnステートメントが出力に使用されます(printf関数で)。プログラムの出力はクリーンなhtmlコードになります。
したがって、たとえば、見出し1のタグは次のように変換されます。
h1 { "Hello, " + toCapital(name) + "!"; }
// would become:
printf("<h1>Hello, %s!</h1>", toCapital(name));
私の主な目標は、次のようにwdiソースをhtmlに変換するインタープリターを作成することです。
tag(attributes) {content}
=><tag attributes>content</tag>
次に、インタプリタから返されたhtmlコードをprintfsを使用してCコードに挿入する必要があります。wdi内で発生する変数と関数も、printfパラメーターとして使用するためにソートする必要があります(サンプルソースのtoCapital(name)の場合)。
wdiのレクサーとパーサーを作成するための効率的な(高速パーサーを作成したい)方法を探しています。すでにフレックスとバイソンを試しましたが、それらが最高のツールであるかどうかはわかりません。良い選択肢はありますか?そのようなインタプリタを作成するための最良の方法は何ですか?この問題に関する簡単な文献を教えてください。