1
我正在編寫需要用目標語言編寫的一些自定義代碼的語法。這是很容易添加例如有條件地在ANTLR語法中添加自定義代碼
@parser::members {
}
的問題是,我指定多種語言,並且我還沒有找到一種方法來指定多種語言沒有拷貝粘貼+整個語法。
有沒有辦法複製粘貼或外部預處理器?
我正在編寫需要用目標語言編寫的一些自定義代碼的語法。這是很容易添加例如有條件地在ANTLR語法中添加自定義代碼
@parser::members {
}
的問題是,我指定多種語言,並且我還沒有找到一種方法來指定多種語言沒有拷貝粘貼+整個語法。
有沒有辦法複製粘貼或外部預處理器?
恐怕沒有解決辦法。動作代碼按照定義用目標語言編寫,因爲它直接從語法複製到生成的文件。如果你的目標語言都可以處理#ifdef #endif
(比如C,C++和Obj-C),那麼你可以使用它來分離各個代碼部分。否則,您可以在佔位符中使用基本語法,並在預編譯步驟(您生成解析器/詞法分析器的位置)中處理該佔位符,並用實際目標代碼替換佔位符。這甚至使語法更清晰。
這或多或少是我現在正在設計的(我使用模板引擎在預處理步驟中轉換語法)。我只是覺得可能有一個更明顯的方法。 – Krumelur
我同意將目標語言與語法分離使代碼更易於閱讀。我寧願ANTLR擁有內置的內容,或者至少有一個記錄在案的最佳實踐。 – Krumelur