3

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

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

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

4

1 回答 1

5

简单回答是不”。

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

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

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

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

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

一旦语法正确,您还会遇到构建翻译器的问题。您可能会发现这个 SO 答案很有帮助:我可以对代码强制执行哪些类型的模式以使其更容易翻译成另一种编程语言?

于 2011-06-28T14:58:26.590 回答