3

我需要在Tradestation的EasyLanguage與C++之間建立一個「翻譯器」(交叉編譯器是正確的詞?)。但是,EasyLanguage的語法沒有任何完整的文檔(我可以找到它)。逆向工程編程語言或'無監督學習語言'

作爲一個更一般的問題,如果我們知道(或者即使我們不知道)存在,給定一些語言'A'中的有效程序,是否有可能辨別'A'的語法某些基本標記如'if''else'和保留字,或者是這些未解決的特定案例(難以解決)的問題之一。

有什麼有用的工具可以用來啓動嗎?

+1

關於指定EasyLanaguage問題,這不符合您的需求嗎? http://www.lombardreport.it/uploads/dispense/manuale.pdf「EasyLanguage使您能夠在交易信號,分析技術和函數中使用駐留在動態鏈接庫中的函數(用 C或C++編寫)。意味着在 除了所有EasyLanguage保留字和函數之外,還可以在您的 處置函數中使用C或C++編寫的DLL。「 – Wudang

+0

至少你有一個非常全面的參考手冊(武當鏈接)。即使你必須親手操作語法,這也不是一個好的開始。 –

回答

5

簡單的答案是「否」。

來自示例的任何一種泛化都遭遇到這樣一個基本事實:猜測。您可能會猜測該語言有一個'if'標記。不能保證它確實,或者它被拼寫爲if或者它具有您理解的語義。 你不會得到一個自動工具來爲你引發語法。

最好的辦法是採取所有的文件,你可以得到描述的langauge,並且,好了,在語法猜測。然後,爲語法構建一個解析器,並根據您可以找到並修改的代碼基礎進行驗證。我用各種各樣的語言做了幾十次(見我的生物)。

這很痛苦,但你經常得到某個地方非常有用。好消息是,您的解析器不必解析用戶不知道如何編寫的任何內容。壞消息是他們會根據你從未見過的一些不太明顯的例子或者意外發生的錯字來寫東西。 (即使是語言設計者也不打算這麼做,但這對用戶無關緊要,他的程序能夠正常工作,編譯器也不會這麼做)。

你永遠不會知道的是,如果語言的提供者具有某些他根本沒有記錄的功能,並且沒有顯示其他人。隨時準備好讓您感到驚訝: - {

現在,您可以用於此過程的最佳工具恕我直言,是GLR parser generator;這是我公司使用的。這些將解析任何上下文無關的語言(您可能會建議),而不需要費力地彎曲語法來匹配遞歸下降,LL(k)或LR(k)解析器的其他常見限制。生活很難猜測語法,更別說猜測語法,然後猜測如何彎曲以使分析器生成器正確地吞下它。

一旦你獲得了正確的語法,你也有構建翻譯的問題。您可能會發現這樣的回答有幫助:What kinds of patterns could I enforce on the code to make it easier to translate to another programming language?