语义分析后拦截编译

Posted

技术标签:

【中文标题】语义分析后拦截编译【英文标题】:Intercept compilation after semantic analysis 【发布时间】:2016-05-31 12:04:27 【问题描述】:

我正在寻找一种拦截编译过程的方法(C++ 程序,在 Visual Studio 中,但我也对其他工具感兴趣)。

我愿意

(1)得到某种树形结构的语义分析结果

(2) 自动插入一些新语句并

(3) 将其交还给编译器以继续其工作。

我会用它来检查和验证我的多线程程序是如何工作的(c) 执行实际的语句。

由于我想在每条语句之前插入这段代码,我需要一个自动方法。但是,使用正则表达式或一些类似的简单技术不会考虑语言的所有规则,例如if 语句可以包含单个语句,而没有 和 指示代码块的开始和结束 - 在这种情况下,在 if 语句之前插入代码将完全改变源的原始含义。区分函数和结构也可能很困难。

所以,请向我推荐一些工具/技术来做到这一点。

【问题讨论】:

不要认为微软会记录任何类似的东西。一个不同的起点可能是clang,但它可能会大量工作。 @BoPersson:嗯,这正是 LLVM 设计允许的那种工作,不是吗? (OP:LLVM 是支持 clang 的编译器基础结构)。 【参考方案1】:

据我所知,微软编译器不开放做这样的转换。 也许使用 Clang 编译器会更好,你可以参考这个有趣的article 来了解如何更改树。

【讨论】:

以上是关于语义分析后拦截编译的主要内容,如果未能解决你的问题,请参考以下文章

读龙书学编译原理 语义分析...

编译原理系列 实验四语义分析与中间代码生成

编译原理系列 实验四语义分析与中间代码生成

编译过程

编译器中的语义分析

语义分析的语言?