我打算編寫一個編譯器(包括解析器)到OCaml
來解析和運行VBA
或/和VB
程序。我已經完成了簡單的命令式語言,但我不知道如何處理VBA
或/和VB
的「對象」功能...尋找一個用OCaml編寫的VBA/VB解析器/編譯器
有誰知道是否有任何現有的工作可以激發?
我打算編寫一個編譯器(包括解析器)到OCaml
來解析和運行VBA
或/和VB
程序。我已經完成了簡單的命令式語言,但我不知道如何處理VBA
或/和VB
的「對象」功能...尋找一個用OCaml編寫的VBA/VB解析器/編譯器
有誰知道是否有任何現有的工作可以激發?
不是一個ocaml的解決方案(但OP問):
我們DMS Software Reengineering Toolkit是通用程序分析和改造機械。它旨在爲計算機語言的定製軟件工程工具提供一個便利的基礎,其目標是幫助工具工程師完成工作,而不是花時間重新開發工作。特別是,許多人認爲獲得解析器是這項工作的重要組成部分。這簡直是錯誤的。見Life After Parsing。
對於很多語言,包括Visual Basic在內的各種方言(VB6,VBA [基本上與VB6相同])和VB.net,DMS有production front ends。
通過生產我的意思是應用於真正的大規模代碼系統,並處理所有相應的解析問題。對於傳統語言,例如VB,特別是較老的方言,這是相當困難的,因爲這些語言通常記錄不完全(特別是VB6和VBA)。解決這個問題的唯一方法就是構建一個草案解析器,將其與實際相對照,然後進行修改,直到大量代碼合理化。這通常需要比編寫解析器草案更長的時間,因爲它不容易理解錯誤(它們沒有記錄!),您必須決定它們是真實還是代碼庫只是垃圾(比您想象的更多),猜猜這對語法意味着什麼,然後再試一次。
這些前端作爲最小解析源代碼和構建ASTs;他們也可以反轉這個過程來重新生成合法的帶註釋的可編譯代碼作爲源文本文件。 VisualBasic前端完成此操作。我們的一些其他前端(C,C++,Java,COBOL)更進一步:名稱/類型解析,流分析等;他們通過從特定於語言的AST中收集關鍵程序事實,然後應用DMS提供的機器來計算結果。如果這樣的事實有用,對於VisualBasic也是可能的。
謝謝......最讓我感興趣的是VB的前端,如果我理解的很好,我可以將由你的工具構建的AST連接到我的分析器(在OCaml),對吧?另外,您的工具已付款,對不對? – SoftTimur 2012-07-23 02:16:39
DMS及其前端是商業工具,是的。詳情請與公司聯繫。 「可以將AST連接到你的分析儀......」是的,我們得到了很多問題。是的,我們可以使用lisp或者XML樹來導出AST(坦率地說,如果您有AST數據結構,這些任務都不是很困難)。但是,你需要閱讀它,然後繼續構建自己的機器來處理它以達到你的目的。是的,這是可能的。解析後你有沒有讀過我關於生活的文章?你需要複製儘可能多的東西以達到你的目的...... – 2012-07-23 02:31:52
......這通常會比人們預期的要多得多,尤其是如果他們以前沒有做過。我們不會阻止你這樣做,但實際需要的努力程度和細節的數量通常會阻止人們達到目標。我們提供DMS作爲實現複雜代碼分析和轉換任務所需的典型機器的集成包。我們有大約50人年的博士水平工程,由經驗推動人們需要和反饋。你的舉動。 – 2012-07-23 02:35:00
對於在OCaml中編寫的一個微小OO語言的示例,請查看:http://andrej.com/plzoo/的boa源代碼。
面向對象的味道不是基於類,但我不知道它將會是多麼有用。
對於各種(特別是傳統)語言(例如VBA/VB6/VB.net)的良好解析器很難找到。爲什麼通過堅持特定的(未廣泛使用的)編程語言來限制它?如果OCaml不是要求,我有答案。 – 2012-07-20 16:16:14
@IraBaxter其實OCaml或多或少是一個要求,但你有什麼答案? – SoftTimur 2012-07-20 16:56:26
爲什麼OCaml是一項要求?沒有人執行最終的編譯程序。我的猜測是你就像OCaml。 – 2012-07-20 17:23:35