2

我打算编写一个编译器(包括解析器)OCaml来解析和运行VBA或/和VB程序。我已经为简单的命令式语言做到了这一点,但我不确定如何处理VBAor/and的“对象”特性VB......

有谁知道是否有任何现有的工作可以激发我的灵感?

4

2 回答 2

5

不是 OCaml 解决方案(但 OP 询问):

我们的DMS 软件再造工具包是通用程序分析和转换工具。它旨在成为用于计算机语言的定制软件工程工具的便捷基础,其目标是帮助工具工程师完成工作,而不是花时间重新发明轮子。特别是,许多人认为获取解析器是这项工作的重要组成部分。这完全是错误的。请参阅解析后的生活

DMS 具有多种语言的生产前端,包括现代语言和传统语言,包括各种方言中的Visual Basic(VB6、VBA [与 VB6 基本相同])和 VB.net。

通过生产,我的意思是已应用于规模很大的实际代码系统并处理所有相应的解析问题。这对于传统语言(例如 VB)来说是相当困难的,尤其是较旧的方言,因为这些语言的文档通常很差(尤其是 VB6 和 VBA)。做到这一点的唯一方法是构建一个解析器草案,根据实际情况运行它,然后修改直到大量代码合理地通过。这通常比草稿解析器花费更长的时间,因为不容易理解错误(它们没有记录!),您必须确定它们是真实的还是代码库只是有垃圾(比您想象的更多) ),猜猜它对语法意味着什么,然后再试一次。

这些前端作为最小解析源代码并构建 AST;他们还可以反转此过程以重新生成合法的可编译代码,并将注释作为源文本文件返回。VisualBasic 前端执行此操作。我们的一些其他前端(C、C++、Java、COBOL)走得更远:名称/类型解析、流分析等;他们通过从特定语言的 AST 中收集关键程序事实来做到这一点,然后应用 DMS 提供的机器来计算结果。如果这些事实有用的话,这对于 VisualBasic 也是可能的。

于 2012-07-20T17:31:14.367 回答
1

有关用 OCaml 编写的小型 OO 语言的示例,请查看 boa 的源代码:http: //andrej.com/plzoo/

OO 风格不是基于类的,所以我不确定它会有多大用处。

于 2012-07-22T04:37:49.503 回答