2011-04-13 84 views
3

我正在尋找一種用Java編寫的能夠讀取JML的解析器。JML的簡單解析器

基本上我希望解析器能夠讀取JML塊並知道它屬於哪個方法。

我一直在看OpenJML項目,但只是項目設置太多。

回答

3

我懷疑你會找到一個完全符合你想要的,甚至接近你想要的東西的工具。

您可以編寫一個「部分」Java語法,掃描輸入文件的//@ .../*@ ... @*/,然後直接跟一個方法聲明。通過「partial」,我的意思是說,你不是在語義上解析輸入源,而只是在詞法層面上執行此操作(僅用於記號)。確保你說明了字符串文字:你不希望文字String s = "/*@";成爲JML規範的開始。

兩臺Java衆所周知的解析器發電機是:

  1. ANTLR
  2. JavaCC

前往握把與任何一個都需要一點時間,特別是如果你是新來的解析器生成器,但是一旦你掌握了它,創建一個可以可靠地完成這個任務的小語法確實沒有太多的工作。

+0

這個想法聽起來很有趣,但是,我沒有時間瞭解解析器生成。我想我可以通過RegEx的幾個關鍵點來解決你對此的看法? – 2011-04-13 22:38:08

+0

用正則表達式做它將是不可靠的。您將無法區分有效的JML規範與字符串文字('「.../* @ ...」')內部以及註釋('// ... @ */...')內部的規範。 – 2011-04-14 06:09:30

+0

我上面的例子可能永遠不會發生,但是每當大塊代碼被註釋掉(通過多個'''',或'/ * ... * /'),正則表達式仍然會匹配內部的JML規範那些塊。簡而言之,正則表達式可能會訣竅,但它永遠不會是一個「生產值得」的解決方案,IMO(我是一個真正的正規表達愛好者!)。 – 2011-04-14 08:27:10