我正在試圖編寫標記代碼(如xml和html)的元語言,這些代碼可以直接嵌入到C/C++代碼中。 下面是用這種語言編寫一個簡單的示例,我把它叫做WDI(Web開發接口):如何高效地在C中構建解釋器(詞法分析器+解析器)?
/*
* 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; } }
}
}
}
}
}
基本上它是一個C源代碼HTML的用戶友好的界面。 正如你所看到的,傳統的基於標籤的風格被類C所取代,其中塊用花括號分隔。 我需要建立一個解釋器來將這段代碼翻譯成html,並且將它後面插入到C中,以便它可以被編譯。 C部分保持完好。 在wdi源內部沒有必要使用打印,每個返回語句將用於輸出(在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(名稱)的情況)。
我在尋找高效的(我想創建一個快速解析器)的方式來爲wdi創建一個詞法分析器和解析器。已經嘗試過彎曲和野牛,但是我不確定它們是否是最好的工具。有沒有什麼好的選擇?創建這樣的口譯員的最佳方式是什麼?你能否就這個問題提供一些簡要的文獻建議?
imho,flex和野牛可能是這項工作的最佳工具。 – ereOn 2010-05-20 16:08:02
你不是真的在問WDI-> C編譯器嗎?聽起來你不想直接執行WDI代碼,而是將其轉換爲C,然後將C代碼提供給C編譯器。 – 2010-05-20 16:13:26
沒錯! WDI應該被轉換爲C.但是我認爲這個實現是相似的,所以我也想創建一個僅用於html的解釋器來使用和測試。 – Rizo 2010-05-20 16:20:12