Compiler construction 逆向工程一种编程语言或';语言的无监督学习'; 我需要在TraveStand的EasyLoad到C++之间建立一个“翻译器”(是交叉编译器,正确的单词?)。然而,关于EasyLanguage的语法(我可以找到)没有任何完整的文档

Compiler construction 逆向工程一种编程语言或';语言的无监督学习'; 我需要在TraveStand的EasyLoad到C++之间建立一个“翻译器”(是交叉编译器,正确的单词?)。然而,关于EasyLanguage的语法(我可以找到)没有任何完整的文档,compiler-construction,programming-languages,tradestation,Compiler Construction,Programming Languages,Tradestation,作为一个更一般的问题,给定某种语言“a”中的一组有效程序,如果我们知道(甚至不知道)某些基本标记(如“if”“else”和保留字)的存在,是否有可能识别出“a”的语法,或者这是一个未解决的特定于大小写的(困难的)问题 有什么有用的工具可以用来开始吗?简单的答案是“没有” 任何一种基于实例的泛化都有一个基本事实,那就是猜测。您可能会猜到langauge有一个“如果”标记。不能保证它是正确的,或者它的拼写是,如果是,或者它的语义是您理解的。 你不会得到一个自动工具来为你归纳语法 你最好的办法是把你能

作为一个更一般的问题,给定某种语言“a”中的一组有效程序,如果我们知道(甚至不知道)某些基本标记(如“if”“else”和保留字)的存在,是否有可能识别出“a”的语法,或者这是一个未解决的特定于大小写的(困难的)问题

有什么有用的工具可以用来开始吗?

简单的答案是“没有”

任何一种基于实例的泛化都有一个基本事实,那就是猜测。您可能会猜到langauge有一个“如果”标记。不能保证它是正确的,或者它的拼写是,如果是,或者它的语义是您理解的。 你不会得到一个自动工具来为你归纳语法

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

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

你永远不会知道的是,语言的提供者是否有某些他根本没有记录的特性,并且没有向其他人展示。在完成后的很长一段时间内,要时刻准备好惊讶:-{

现在,对于这个过程,您可以使用的最佳工具是a;这是我的公司使用的工具。这些工具将解析任何上下文无关的语言(您可能会提出),而无需费劲地修改语法以匹配递归下降、LL(k)或LR(k)的其他常见限制语法分析器。猜测语法已经够难的了,更不用说猜测语法,然后猜测如何屈从语法,让语法分析器生成器正确地接受语法了


一旦语法正确,您也会遇到构建翻译器的问题。您可能会发现这个答案非常有用:

关于特定的EasyLanguage问题,这是否满足您的需要?“EasyLanguage允许您使用动态链接库中的函数(用C或C++编写)在交易信号、分析技术和函数中,这意味着除了所有易语言保留的单词和函数之外,您还可以处理在C或C++中编写的DLL中的任何函数。“至少您有一个非常完整的参考手册(乌当链接)。.那是个不错的起点,即使你必须手工归纳语法。