因为对比python的实现, c#版对AST的信息依赖度更重, 所以我们重新组织了整个python binding, 将不同类型的Cursor的处理代码独立出来, 最终实现了c#版的bridge基于c+...注意ClangSharp.Interop中的部分代码也是由它来生成的. - ClangSharp.Interop - libclang 与 libClangSharp C++库的C#包装, 我们可以认为这部分是..., P/Invoke封装通过对非安全的指针的使用, 弱化c++与C#的差异, 使相关的结构体, 如CXCursor可以在两个语言间自然的转换, 这对于跨语言接口的实现是很关键的....类型系统的复杂度主要体现在: - c++中众多的builtin类型 - 用户可以通过自定义的方法扩展大量的UDT(如class和enum等) - c++支持如Pointer和Reference, Array...方便在需要的节点加入自定义数据, 处理定制流程, 如meta attribute支持.
9.2 整体的处理流程
加入自定义的结构化ClangAST层, 整个处理流程如下所示:
9.3 结构化AST的代码组织