2011-10-12 56 views
2

我正在開發一個助理來爲DBA鍵入數據庫命令,因爲這些命令有很多參數,助理將幫助他們完成很多工作。對於這個助手,我需要命令的語法,但數據庫供應商(Oracle,DB2)不以任何格式提供這些信息,唯一的是文檔。 DB2命令的Java語法語法分析器(ASCII到圖表)

一個例子是:http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html

出於這個原因,我試圖分析語法圖表或鐵路圖(http://en.wikipedia.org/wiki/Syntax_diagram),但我還沒有發現任何的Java,可以幫助我。我想要一些重新設計(反向)工具,它採用語法的ASCII(文本表示),並使用Java創建圖形。然後,使用Java中的圖形,助理可以提出當前鍵入命令的選項。

在例如助手http://www.youtube.com/watch?v=5sBoUHJupvs

如果您有關於如何分析語法圖與Java信息(不產生),我會很高興的是信息的。

回答

0

你可以嘗試使用ANTLR http://www.antlr.org/ 它不能理解語法的ASCII表示,但它足夠強大,可以做任何你需要的東西,如果你不介意花時間學習軟件。

3

我見過的最接近的工具是Ralf Lammel的Grammar Recovery System。這取決於鐵路圖的可訪問性文本字符串。這通常不是他們如何找到的。在DB2的情況下,你看起來很幸運,拉爾夫的工作點朝着正確的方向發展。

考慮到這樣的圖通常只是一組像素(PLSQL就像是在爲文檔提供的PDF文件中一樣),你有幾套問題:從像素中識別圖形實體,將它們組裝成實際的表示鐵路圖,然後使用如你的助手。

我認爲這是一個漫長而艱難的不切實際的方法。如果你有它的工作,你會發現許多地方的圖表都有些錯誤(閱讀Ralf的論文或者難以找到答案),因此無法使用本應產生「正確」材料的工具來幫助你數據庫管理員。

當然,您正在反對閱讀文檔和生成匹配的文法,然後根據現實世界對這些文法進行驗證的另一種長期,艱苦,「不切實際」的方法。是的,這也是一個棘手的問題,但它確實產生了有用的結果。您需要找到完成此操作的供應商並將其提供給您。

ANTLR.org提供了各種語法。你在那裏檢查過嗎?

我公司提供語法和工具來處理它們。我們已經完成了PLSQL和SQL2011,但還沒有DB2。

給定一個語法,你現在需要用它來爲用戶提供「建議」。您的用戶不會輸入完整的「程序」;他們想要生成片段(例如,SELECT語句)。現在您需要一個解析器來處理語法片段,並至少說出「合法」或「不」。大多數人不會那樣做。我們的DMS Software Reengineering Toolkit這樣做。

要提供建議,您需要能夠走語法(就像您考慮鐵路圖時一樣)來計算「什麼是合法的下一步」。這實際上很難(事實上,它大致相當於構建表時LR/GLR解析器生成器的功能)。我們的DMS引擎在語法錯誤修復期間通過遍歷其GLR分析表(因爲這些工作已經在表格中編碼了!)。這並不容易,因爲它是GLR解析算法的一個特殊變體。 Earley解析器可能會更好,它將所有可能的解析作爲一組選項進行存儲;你可以簡單地檢查每一個。

但是這看起來像很多工作,我想你會爲你需要的機器數量感到驚訝。

該領域的最佳作品是Harmonia,它爲代碼生成增量編輯器。我們的DMS引擎的解析器基於此項目完成的早期工作,因爲我們對增量性方面感興趣。