问题标签 [pycparser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1365 浏览

python - 如何使用 sly 仅获取功能块

我需要获取功能块(定义和所有内容,而不仅仅是声明),以获得函数依赖图。从函数依赖图中,识别连接的组件并模块化我极其庞大的 C 代码库,一次一个文件。

问题:我需要一个 C 解析器来识别功能块,仅此而已。我们有自定义类型等,但签名去

我想出的解决方案:显然,像任何理智的人一样使用 sly 和 pycparser。

pycparser 的问题:需要从其他文件编译预处理器,只是为了识别代码块。就我而言,事情达到了 6 个级别的深度。很抱歉,我无法显示实际代码。

尝试使用 Sly 编写代码:

错误 :

输入:

期望的输出:

0 投票
2 回答
126 浏览

python - 如何按功能块拆分 C 程序?

我正在尝试按功能块拆分 C 程序。例如,

我尝试使用正则表达式库并尝试按(){. 但是没有用。不知道从哪里开始。

我希望结果是一个列表,其中每个功能块作为一个元素:['int first(){ ... }', 'customtype second(){....}']

我尝试了以下但得到None

0 投票
1 回答
192 浏览

c - 使用 pycparser 编辑 C 函数声明

我需要编写一个 Python 程序来解析 C 源代码文件并在每个函数声明的末尾添加一个隐藏参数。

更准确地说,我需要更改如下内容:

变成这样的东西:

显然,我还需要编辑其他函数对该函数的所有调用。

我需要使用 来执行此操作pycparser,但是一旦阅读了 AST,我就无法弄清楚编辑 AST 的正确方法。有没有我想念的正确方法(或任何方法)?

0 投票
1 回答
366 浏览

python - 如何使用 pycparser 删除 AST 节点?

让我们从考虑这个片段开始:

上面的输出将是:

但我希望它变成这样:

所以我的问题是,使用 pycparser 从 AST 中删除节点/子树的规范/惯用方法是什么?

0 投票
0 回答
140 浏览

c - pycparser:解析回c文件

我正在尝试学习如何使用 pycparser,在我的练习中,我遇到了这个问题。基本上我有一个带有系统头文件的 C 文件,#include <stdio.h>#include <stdlib.h>想通过 pycparser ast 树来分析它。我成功地使用了假标题,所以我可以解析文件,但后来我遇到了这个问题:ast 现在包含很多 typedef 并且不包含真正的标题,所以在我将 ast 打印到文件中以获得我的 c代码返回,它无法编译,因为缺少真正的头文件。

例如这个文件:

变成这样:

做我的研究,我看到#include <stdlib.h>包含以下几行:

并且这些标题包含出现在我的文件中的所有 typedef。

有没有办法用真正的标题打印回 c 代码?

0 投票
0 回答
209 浏览

python-3.x - 使用 pycparser 获取枚举/结构的成员

我有一个简单的 C 程序test.c,我想在 pycparser 的帮助下获取sample_enumsample_struct使用 python 的成员。

我得到预处理输出并将其保存到test.txt.

这是我的python程序:

ast.show 打印一堆输出,包括这些:

所以我的问题是,我是否需要解析输出并分别提取 enum 和 struct 的成员?或者里面有一个内置的方法/机制pycparser可能会让我的生活更轻松。

0 投票
0 回答
142 浏览

python - pycparser 中的未知 uint8_t 类型

我正在尝试解析 C 函数声明。正如它所具有uint8_tuint16_t那样,pycparser 无法识别这种类型。

这是我想要解析和创建的代码,但它给出了以 uint8_t 作为标识符的参数测试的函数声明错误

如何在 pycparser 中包含这些类型?

0 投票
1 回答
163 浏览

python - 如何从 pycparser 生成的 ast 中找到 switch 语句?

我正在尝试使用 pycparser 解析 c 文件并找到我使用https://github.com/eliben/pycparser/blob/master/examples/explore_ast.py这个链接生成 ast 的 switch 语句。然后使用 n = len(ast.ext) 我找到了从 ast 生成的 exts 的长度。现在我必须从我尝试做的 ast 中找到 switch 语句 if re.findall(r'(switch(\s*'),ast.ext) 并匹配正则表达式以找到 switch case 但它没有发生。如何继续这是因为我对 pycparser 完全陌生,对此一无所知

0 投票
0 回答
55 浏览

javascript - 使用 pycparser 从 C 解析到 Javascript

我正在尝试将 C 中的一些代码解析为 Javascript 以在网站上使用它。我已经按照 github 文档https://github.com/eliben/pycparser中的说明下载了 pycparser,但我不知道如何使用它。例如,我需要使用哪些命令以及如何使用 clang 或 cpp 对代码进行预处理。

谁能帮我?

谢谢。

0 投票
1 回答
36 浏览

python - 在 C 文件中查找除法运算符实例

我试图在一个大的 c 文件中找到所有除法运算符。我看到了这个Python 代码示例

我试图将它用于我的 c 文件。因此,我使用 pycparser 将我的 c 文件解析为 ast,如下所示:

然后我尝试通过修改 translate_to_c 来使用该示例,如下所示:

我收到以下错误:

那么关于如何在我的代码中使用这个例子有什么想法吗?或如何在一般的 ast 文件上循环?