, c++并不是这块的佼佼者.
libclang默认使用callback的方式对AST进行访问, 复杂应用场景需要对节点进行反复操作时比较不便.
4.2 使用语言 - python
llvm库自带了...但当相关的代码复杂度较高, 处理的代码量比较大时, python本身的性能劣势就会凸显, 工程组织以及性能提升上的短板都会凸显.
4.3 使用语言 - c#
可能有同学之前也接触过, 微软有个一直挺活跃的叫...编译的时候需要注意一下llvm版本与libclangsharp的匹配, g6使用的版本对应的应该是llvm9....(有点自循环的味道, 类似编译器的自举, 但这里只是部分的, 整体实现还是会依赖不少手动代码)...., 工具本身的开发过程中, 一些执行与预期不符的情况 , 我们就会借助相关的功能来检查问题产生的原因.
8.1 编译代码到AST
我们直接以Clangen使用的编译函数为例来说明整个编译过程:
public