2013-08-28 185 views
0

我想將一種簡單的編程語言翻譯成另一種編程語言。我只需要輸出在語法上是有效的,因此代碼生成部分可以放棄。編程語言翻譯

說,Python的一個子集到C.我覺得我可以欺騙一下,只是「複製粘貼」大部分代碼,但是說我想將Python的列表/字符串拼接轉換爲C,然後它變得不平凡(對我來說,此刻)。

我一直到自頂向下的遞歸下降解析器(實際語法未決)。接下來我該做什麼?我有一本龍書(第二版),但是在我現在所在的位置之前瀏覽,但我不明白我能做到這一點,並且同時進行代碼生成。我不確定是否可能丟棄,但我不需要生成可執行文件,也不需要爲其他輸出語言擴展程序來需要中間代碼。

我被卡住了。該程序正在編寫C.

+1

如果您只需要輸出語法上有效,您可以生成「main(){}」並完成。關鍵是,它從來沒有那麼容易。您必須將源代碼中的概念翻譯成目標語言中的等效概念。如何做到這一點並不總是顯而易見,並且通常翻譯一點依賴於來自代碼中「遙遠」的信息。我認爲「我像我可以欺騙一樣掉下來」很可能不起作用。建議你在進一步深入之前閱讀一本認真的編譯器書。 –

+0

這個問題再次彈出,沒有進一步的答案。 OP可能對這個關於構建(特別是「馬虎」)語言轉換器的討論感興趣:http://stackoverflow.com/questions/3455456/what-kinds-of-patterns-could-i-enforce-on-the-code - 使它更容易翻譯/ 3460977#3460977 –

+0

我以前使用LLVM來實現這一點。如果您的語言具有LLVM前端(或者可以編寫一個),則可以編寫LLVM通道來生成其他語言的源代碼。 – silverclaw

回答