出于教学目的,我们正在为(C子代码的一个子集)构建一个javascript一步一步的解释器。
基本上我们有:int,float ...,数组,函数,for,while ......没有指针。 完成javascript解释器并允许我们解释如何计算布尔表达式,将显示变量堆栈...
现在,我们手动将我们的C示例转换为一些javascript,它将运行并构建一系列动作(效果,函数调用......),以后可以用来逐步完成这些操作。由于我们将自己局限于C的一个子集,因此很容易做到。
现在我们想将C代码编译成我们的javascript表示。我们所需要的只是C代码的抽象语法树,javascript生成很简单。
你知道一个可以生成这样一棵树的好C解析器吗?不需要使用javascript(但这将是完美的),任何语言都可以,因为这可以离线完成。
我看过Emscripten(https://github.com/kripken/emscripten),但它更像是一个C => javascript编译器,而这不是我们想要的。
答案 0 :(得分:3)
我最近使用Eli Bendersky的pycparser搞乱了C代码的AST。我认为它适用于您的目的。
答案 1 :(得分:0)
我认为ANTLR有一个完整的C解析器。
要执行翻译任务,我怀疑您需要完整的符号表支持;你必须知道符号是什么意思。在这里,大多数“解析器”都会让你失望;他们没有建立一个完整的符号表。我认为ANTLR没有,但我可能是错的。
我们的DMS Software Reengineering Toolkit及其C Front End提供完整的C arser,并构建完整的符号表。 (您的应用程序可能不需要它,但它也包括一个完整的C预处理器)。它还提供控制流,数据流,点到分析和调用图构造,所有这些都可用于将C转换为目标虚拟机的任何内容。