有誰知道Java預處理器庫嗎?我正在尋找類似m4的東西。我可以從Java調用m4並捕獲結果,但我不想依賴m4被安裝在應用程序運行的系統中。一個類似於m4的獨立Java API會很棒。用於Java的預處理器API
謝謝。
編輯:我想我沒有很清楚地解釋我在做什麼。問題是我正在編寫一個處理以另一種(自定義)語言編寫的源文件的Java應用程序。基本上它是兩種語言之間的翻譯器,源語言支持宏。
有誰知道Java預處理器庫嗎?我正在尋找類似m4的東西。我可以從Java調用m4並捕獲結果,但我不想依賴m4被安裝在應用程序運行的系統中。一個類似於m4的獨立Java API會很棒。用於Java的預處理器API
謝謝。
編輯:我想我沒有很清楚地解釋我在做什麼。問題是我正在編寫一個處理以另一種(自定義)語言編寫的源文件的Java應用程序。基本上它是兩種語言之間的翻譯器,源語言支持宏。
根據你需要做什麼,一個簡單的「查找/替換」過濾器有時就足夠了。在我的情況下,問題是使用相同的源代碼支持多個版本的Java(1.4,5,6)。在源代碼中,我用言論來啓用/禁用塊,如:
import java.sql.Clob;
//## Java 1.6 begin ##
import java.sql.NClob;
//## Java 1.6 end ##
要禁用Java 6塊,更換:
因此它成爲塊註釋。
我寫了一個Java工具來做到這一點。它只是一個類,沒有依賴關係:http://code.google.com/p/h2database/source/browse/trunk/h2/src/tools/org/h2/build/code/SwitchSource.java - 但您可以使用任何類型的文本查找/替換工具。
這種方法的優點是:它仍然是正常的源代碼,您可以編輯和編譯而無需運行預編譯器。你只需要一個工具來「切換」代碼。
Annotation Processing可能是有用的。
感謝您的指針,但是我的源語言不是Java不幸的。這是一種自定義語言,我爲它編寫了一個基於ANTLR的解析器,但是對宏的支持有點被黑了,我想以一種很好的方式重寫它。 – Gabriel 2010-09-10 09:49:03
Velocity也許?
JavaPlus是一個預處理器,可以使用把ResourceBundle執行替換:
的Java註釋預處理器,它可以被稱爲一個庫 https://github.com/raydac/java-comment-preprocessor
難道不creatng一個戰略,至少有2個實現更有意義,更正確? – 2010-09-10 09:17:13
我不確定我是否理解......您對「策略」有何意義?你想要另一個實現SwitchSource.java嗎?我爲什麼要寫另一個? – 2010-09-10 09:36:54
我看到您的解決方案,但我的情況不僅僅是啓用/禁用代碼序列。我必須使用參數等宏來替換宏。 – Gabriel 2010-09-10 09:52:10