我打算在OCaml
中编写一个编译器(包括解析器)来解析和运行VBA
或/和VB
程序。我已经为简单的命令式语言做了这个,但我不知道如何处理VBA
或/和VB
的“对象”功能......
有谁知道我能激发哪些现有作品?
答案 0 :(得分:5)
不是OCaml解决方案(但是OP问):
我们的DMS Software Reengineering Toolkit是通用程序分析和转换机制。它旨在成为计算机语言定制软件工程工具的便利基础,目标是帮助工具工程师完成工作,而不是花时间重新发明轮子。特别是,许多人认为获得解析器是工作的重要组成部分。这简直是假的。请参阅Life After Parsing。
DMS对于许多语言都有production front ends,包括现代和传统语言,包括各种方言中的Visual Basic(VB6,VBA [与VB6基本相同])和VB.net。
通过制作,我的意思是已经应用于大尺寸的实际代码系统并处理所有相应的解析问题。这对于遗留语言来说相当困难,例如VB,尤其是较老的方言,因为这些语言通常记录不完整(特别是VB6和VBA)。实现这一目标的唯一方法是构建一个草案解析器,针对现实运行它,并修改直到大量代码通过合理的方式。这通常需要比草稿解析器更长的时间,因为它不容易理解错误(它们没有文档!),你必须决定它们是真的还是代码库只是垃圾(比你想象的更频繁) ),猜猜它对语法意味着什么并再试一次。
这些前端作为最小解析源代码和构建AST;他们还可以反转此过程以重新生成 legal 可编译代码,并将注释作为源文本文件返回。 VisualBasic前端执行此操作。我们的一些其他前端(C,C ++,Java,COBOL)更进一步:名称/类型分辨率,流量分析等;他们通过从语言特定的AST收集关键程序事实,然后应用DMS提供的机器来计算结果。如果这些事实有用,那么VisualBasic也是可能的。
答案 1 :(得分:1)
有关在OCaml中编写的小型OO语言的示例,请查看boa的源代码:http://andrej.com/plzoo/。
OO的味道不是基于类的,所以我不确定它会有多大用处。