compiler-construction - 对编程语言进行逆向工程或 'Unsupervised Learning of Languages'

标签 compiler-construction programming-languages tradestation

我需要在 Tradestation 的 EasyLanguage 与 C++ 之间构建一个“翻译器”(交叉编译器是正确的词吗?)。但是,没有任何关于 EasyLanguage 语法的完整文档(我能找到)。

作为一个更一般的问题,给定一组使用某种语言“A”的有效程序,如果我们知道(或者即使我们不知道)存在某些基本标记,如“if”、“else”和保留字,或者这是 Unresolved 特定案例(困难?)问题之一。

有什么有用的工具可以帮助我入门吗?

最佳答案

简单的回答是“否”。

从示例中进行的任何类型的概括都受到一个基本事实的影响,即它是猜测。您可能猜测该语言有一个“if”标记。不能保证它确实如此,或者它拼写为 if 或它具有您理解的语义。 您不会获得自动工具来为您归纳语法。

你最好的办法是获取所有你能得到的描述语言的文档,然后语法。然后你为语法构建一个解析器,并根据你能找到的尽可能大的代码库对其进行验证,然后进行修改。我已经用各种各样的语言做了几十次(见我的简历)。

这很痛苦,但您经常会找到一些非常有用的地方。好消息是您的解析器不必解析用户不知道如何编写的任何内容。坏消息是他们会根据你从未见过的一些晦涩的例子来写东西,或者用一个意外的拼写错误来写东西。 (即使是语言设计者也不是故意的,但这对用户来说并不重要;他的程序可以工作而你的编译器不能。你的问题就是定义)。

您永远不会知道语言的提供者是否具有他根本没有记录并且没有向其他人展示的某些功能。在你完成很久之后,不断地准备好惊讶:-{

现在,恕我直言,您可以用于此过程的最佳工具是 GLR parser generator ;这是我公司使用的。这些将解析任何上下文无关的语言(您可能会建议),而无需费力地改变语法以匹配递归下降、LL(k) 或 LR(k) 解析器的其他常见限制。生活已经很难去猜测语法,更不用说猜测语法然后猜测如何屈从于它让解析器生成器正确地吞下它了。

一旦你掌握了正确的语法,你也有构建翻译器的问题。您可能会发现这个 SO 答案很有帮助:What kinds of patterns could I enforce on the code to make it easier to translate to another programming language?

关于compiler-construction - 对编程语言进行逆向工程或 'Unsupervised Learning of Languages',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508394/

相关文章:

assembly - 扩展编译器以获得自己的汇编输出

java - 您的 javadoc 是否被编译到您的类文件中?

linux - 对于希望在 Linux 平台上开发的 c# 开发人员来说,选择哪种语言比较好?

algorithm - 如何操纵围绕中心值震荡的价格序列(指标)?

visual-studio - 为什么我不应该使用/optimize 开关来编译我的 C# 代码?

compiler-construction - 使用内存数据编译文件而不是 Common Lisp 中的真实文件

user-interface - 我应该学习什么语言来创建命令行脚本和 GUI?

windows - 创建一个可在任何地方运行的小型 'window-form' 应用程序

python - 开始使用 Tradestation webAPI

C++ 监视变量的更改值