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?