C的子集的抽象语法树

| 为了教学目的,我们正在为C代码(的一部分)构建javascript逐步解释器。 基本上,我们有:int,float ...,数组,函数,for,而...没有指针。 javascript解释器已完成,使我们能够解释如何评估布尔表达式,将显示变量堆栈... 目前,我们正在手动将C示例转换为一些javascript,这些javascript将运行并构建一系列动作(影响,函数调用...),这些动作稍后可用于逐步进行操作。由于我们将自己限制为C的子集,因此很容易做到。 现在,我们想将C代码编译为我们的javascript表示形式。我们需要的是C代码的抽象语法树,并且javascript的生成非常简单。 您是否知道可以生成此类树的C语言解析器?无需使用javascript(但这将是完美的),任何语言都可以,因为这可以脱机完成。 我看过Emscripten(https://github.com/kripken/emscripten),但是它更多的是C => javascript编译器,而这不是我们想要的。     
已邀请:
我最近使用了Eli Bendersky的pycparser来混淆C代码的AST。我认为它可以很好地满足您的目的。     
我认为ANTLR具有完整的C解析器。 为了完成翻译任务,我怀疑您需要完整的符号表支持;您必须知道这些符号的含义。在这里,大多数“解析器”都会使您失望;他们没有建立完整的符号表。我认为ANTLR不会,但是我可能是错的。 我们的DMS软件再造工具套件及其C前端提供了完整的Crserer,并构建了完整的符号表。 (您的应用程序可能不需要它,但它也包含完整的C预处理器)。它还提供控制流,数据流,分析点和调用图构造,所有这些都可用于将C转换为目标虚拟机。     

要回复问题请先登录注册