2011-09-22 72 views
3

我正在Visual Studio中使用ANTLR語法開發自定義語言的語言服務。但是,語法中充滿了C++代碼來處理預處理器指令和編譯器的效率原因。有沒有辦法使用一種針對多種語言的ANTLR語法?

Visual Studio的語言服務是用C++編寫的一種痛苦,所以我需要一個用於相同語言的C#解析器。這意味着我必須設置language=CSharp2並從語法中去除所有C++代碼。

我正在考慮編寫一個小的導出程序,將所有C++代碼從語法中刪除,並將諸如{ $channel = HIDDEN; }之類的簡單語句轉換爲{ $channel = TokenChannels.Hidden; }

有沒有更聰明的方法來做到這一點?就像通過模板,或者在語法中嵌入兩種語言的小竅門一樣?

+2

你不能把C++當作託管C++嗎?這應該與它周圍的C#世界兼容。 –

+0

ANTLR必須定義它自己的語義表達式的抽象編程語言,而不是。我選擇處理正在進行的項目的目標是直接使用Python,或者使用Jython(經過測試)在Java中使用Python,或使用Cython使用任何其他語言。 – Apalala

回答

0

我會使用AST將問題分成兩個階段。使解析器處於目標語言中立語法(產生AST),並使用Antlr工具的-target選項以您選擇的目標語言(C++,C#,Java等)生成解析器。

然後用你的動作實現目標語言的AST步行者。這樣做的好處是,一旦你完成了一個AST步行者,你可以複製它,只需改變另一個目標語言的動作。

相關問題