Ani*_*tla 3 compiler-construction programming-languages tradestation
我需要在Tradestation的EasyLanguage到C++之间构建一个"翻译器"(交叉编译器是正确的词吗?).但是,没有关于EasyLanguage语法的完整文档(我可以找到).
作为一个更普遍的问题,如果我们知道(或者即使我们不知道)存在某些基本标记,如果在一些语言"A"中有一组有效的程序,是否可以辨别出"A"的语法?比如'if''other'和保留字,或者这是那些未解决的案例特定(难?)问题.
我可以使用任何有用的工具来开始吗?
简单回答是不".
来自示例的任何类型的泛化都受到猜测的基本事实的影响.你可能会猜测语言有一个'if'标记.如果它具有您理解的语义,则不能保证它确实存在,或者它是拼写的.你不会得到一个自动化工具来为你提供语法.
你最好的选择是获取所有可以描述语言的文件,并且,猜测语法.然后,您将为语法构建一个解析器,并根据您可以找到的代码库进行验证,然后进行修改.我已经用各种各样的语言做了几十次(参见我的简历).
这很痛苦,但你经常得到一些非常有用的地方.好消息是,您的解析器不必解析用户不知道如何编写的任何内容.坏消息是,他们会根据你从未见过的一些模糊的例子或者偶然发生的错字来写东西.(即使是语言设计者也不打算这样做,但这对用户来说无关紧要;他的程序是有效的,你的编译器也没有.根据定义你的问题).
你永远不会知道的是,如果该语言的提供者具有某些他没有记录的特征,并且没有显示任何其他人.在你完成很久之后,不断准备好惊讶: - {
现在,您可以用于此过程的最佳工具IMHO是GLR解析器生成器 ; 这是我公司使用的.这些将解析任何无上下文的语言(你可能会提出),而没有很多努力来弯曲语法以匹配递归下降,LL(k)或LR(k)解析器的其他常见限制.生活是够硬猜测语法,更别说想语法,然后猜测如何弯曲使它解析器生成正确吞下它.
一旦你掌握了语法,你也会遇到构建翻译的问题.您可能会发现这个SO答案很有用:我可以对代码强制执行哪些模式,以便更容易翻译成另一种编程语言?