2010-03-02 115 views
1

我需要將以特定於域的語言編寫的程序轉換爲xml表示形式。這些程序是以簡單的文本文件的形式。你會建議我什麼?我應該用什麼API:解析並從文本翻譯到xml

  1. 解析用這種語言編寫的文本文件。
  2. 基於我獲得的令牌和令牌流寫入xml。

我的標準更多的是快速和容易的發展,而不是記憶或計算時間效率。

非常感謝 科坦

+0

您是否可以訪問DSL的解釋器代碼? – 2010-03-02 17:17:25

+0

爲1.您可以使用antlr http://www.nearinfinity.com/blogs/bill_bejeck/learning_antlr_part_i.html for 2.您需要一個xml序列化程序http://karussell.wordpress.com/2009/09/03/xml -serializers換的java / – Karussell 2010-03-03 11:14:48

回答

2

作業中不太平凡的部分是步驟1,解析域特定語言(DSL)文本而不是#2,將其推送到某種XML語言。

希望你容易有對DSL解析器(顯然這語言必須已投入使用地方 ...),你或許可以「鉤」的出口/轉換邏輯到這個解析器。如果不可能,您需要編寫一個新的解析器。

根據DSL的複雜性,您可能能夠基於幾個循環和切換情況寫一個簡單的解析器。
對於更復雜的語言,ANTLR通常是一個不錯的選擇。簡言之,以Backus Naur Form(BNF,或實際上EBNF,這裏,即Extended家族)形式化DSL的語法,並且ANTLR產生用選擇的目標語言(包括Java)編寫的解析器。 ANTLR的學習曲線是一個需要考慮的因素,但在適度到極其複雜的語言環境中,這是一個值得投資的好方法。 ANTLR是相似的,但在我看來,它是一個比GNU Bison更好的工具,但後者也可以做到這一點,並且目標Java也是如此。
如果你熟悉其他語言,特別是Python,還有很多其他工具可以用於或多或少的臨時解析器;我也使用PyParsing,並很樂意推薦它。

1

XStream是Java EVAR最好的XML串行器/解串器。如果你可以把你的DSL變成Java類,這是一個很棒的庫。