我正在扩展一个软件工具来计算软件项目的指标。然后使用这些指标进行静态代码分析。我的任务是为 c 和 c++ 项目实现指标的计算。
在开发过程中,我遇到了一些问题,导致重置并使用不同的工具或编程语言重新开始。我将按时间顺序尽可能好地说明我试图解决的过程、问题和事情。
一些指标:
由于 c++ 是一种难以解析的语言,我自己编写 c++ 解析器超出了规模,我倾向于使用现有的 c++ 解析器。因此,我开始使用LLVM 项目中的库来收集有关源文件的句法和语义信息。
LLVM 工具链接:https : //clang.llvm.org/docs/Tooling.html
首先,我从用 C++ 编写的 LibTooling 开始,因为它答应我“完全控制”抽象语法树 (AST)。我尝试了RecursiveASTVistor和Matchfinder方法,但没有成功。
因此 LibTooling 被驳回,因为我无法在 AST 中检索有关节点周围的上下文信息。当访问 AST 中的特定节点时,我只能对回调做出反应。但我不知道我目前处于什么环境中。例如。当我访问 C++RecordDeclaration(类、结构、联合)时,我不知道它是否是嵌套记录。但是需要这些信息来计算单个类的代码行。
第二种方法是通过 Python 绑定使用 LibClang 接口。使用 LibClang 接口,我能够以递归方式逐个节点遍历 AST 节点,并将所需的上下文信息存储在堆栈上。在这里,我遇到了 LibClang 的一个普遍问题:
在为文件创建 AST 之前,预处理器已启动并解析所有预处理器指令。正如他应该做的那样。
这导致了第三次也是当前尝试使用由Antlr生成的 c++ 解析器提供的 …
我在理解 RxJS 可观察对象和主题的执行模型/顺序时遇到问题。我读了很多关于 RxJS observables 的文献和博客文章,这是更好的承诺,因为它们的订阅可以取消,并且它们可以通过next()发出多个结果/值。
这个问题可能很容易回答,但是 RxJS 如何创建或模拟异步呢?RxJS Observables 是否包装 Promise 并创建一系列 Promise 以使代码执行异步?或者是因为实现的可观察模式,更改被异步传播到订阅者,但代码执行仍然是同步的?
在我看来,当 JavaScript 代码通过事件循环处理的任何 JavaScript 回调队列中的回调进行处理时,它是异步的。