C源分析

标签 c parsing preprocessor code-analysis

是时候问了:我需要一个 C 预处理器库。

有一个相同的 question对此,但我不认为依赖像 cpp 这样的外部应用程序可以解决我的需求。

我正在尝试分析一种支持 C 预处理器的 C 风格语言。我需要生成的信息是底层源代码所依赖的预处理器符号列表。或者,我需要解决条件预处理器指令,给定一组定义的预处理器符号和包含路径。

我最初的解决方案是我自己的基于正则表达式的实现,但是(如您所想)它并非在所有情况下都有效。宏替换、多括号、字符串连接、宏参数是我将要面对的正确操作的示例。你可以找到我的(部分)实现 here .

所以,我正在寻找一个库(最好是在 .NET 上,但不是必需的),它允许我获取有关在源代码中声明(或应该声明)的所有预处理器符号及其定义(因此它们的定义)的信息相互依赖)。

有什么解决办法吗?


主要目标是管理 OpenGL 着色语言源。用于管理这些源的技术之一是条件预处理器(使用标准 C 预处理器):无需使用运行时条件(提高性能)即可获得许多着色器程序的单一源。

预处理器信息用于源代码分析、源代码编辑(尤其是语法灰色功能)和(更重要的)已编译着色器对象缓存。

已编译的着色器对象缓存通过缓存组成 future 程序的对象(避免重复编译相同的源)允许更快的程序链接。缓存基于源文本和编译参数(实际上是定义的预处理器符号)。实际上,应用程序应分析源代码以获取条件中使用的符号列表:此列表用于计算缓存哈希值。

最佳答案

clang项目提供的 liblex 可以处理许多 C 变体的词法分析和预处理。

关于C源分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478700/

相关文章:

php - 如何用 php 解析 .plist 文件?

Java解析数组中的字符

python - python中有更好的预处理库或实现吗?

c++ - 线程数不同,答案不同

c# - 用于评估可测试性的 C# 代码解析器?

iphone - 如何在 Xcode 4 中定义预处理器宏?

java - Java 中没有预处理器——如果我有条件地喜欢详细的调试输出,最好的方法是什么?

c - 在 C 中多次从 stdin 读取相同的数据

c - 8 Queens puzzle with recursive deep search

c - 为什么会出现浮点异常