- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我尝试使用 pycparser
解析带有注释的文件时,我得到了 ParseError
import pycparser
parser = pycparser.CParser()
parser.parse("int main(void){return 0;}")
parser.parse("/* comment */ int main(void){return 0;}")
Traceback (most recent call last):
File "test_pycparser.py", line 18, in <module> parser.parse("/* comment */ int main(void){return 0;}")
File "build\bdist.win32\egg\pycparser\c_parser.py", line 124, in parse
File "build\bdist.win32\egg\pycparser\ply\yacc.py", line 265, in parse
File "build\bdist.win32\egg\pycparser\ply\yacc.py", line 1047, in parseopt_notrack
File "build\bdist.win32\egg\pycparser\c_parser.py", line 1423, in p_error
File "build\bdist.win32\egg\pycparser\plyparser.py", line 54, in _parse_error
pycparser.plyparser.ParseError: :1:1: before: /
解决方案:当前版本的pycparser
不支持源代码注释,但是this fork允许它,或者你可以使用问题 Python snippet to remove C and C++ comments 中的食谱从源代码中删除注释。
import pycparser
import re
def comment_remover(text):
def replacer(match):
s = match.group(0)
if s.startswith('/'):
return ""
else:
return s
pattern = re.compile(
r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
re.DOTALL | re.MULTILINE
)
return re.sub(pattern, replacer, text)
parser = pycparser.CParser(keep_comment=True)
parser.parse("int main(void){return 0;}")
parser.parse("/* comment */ int main(void){return 0;}")
parser_2 = pycparser.CParser()
parser.parse(comment_remover("/* comment */ int main(void){return 0;}"))
最佳答案
事实上,pycparser 不解析注释,或任何与 C 预处理器相关的东西(在常规 C 编译器中,预处理器在编译器看到它们之前去除注释)。
如 pycparser README
中所建议,要阻止注释扰乱您的解析,请首先通过预处理器运行代码。不幸的是,要真正有意义地解析评论(并获取它们的内容),pycparser 不是正确的工具。
关于python - Pycparser 评论失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16836878/
使用 pycparser 我在要解析的 C 代码中遇到了包含 header 的问题。出于某种神秘的原因,一些“假 header ”可以正常工作,而另一些则不能正常工作。例如,如果我包含 stdint.
我正在尝试使用 pyCparser 创建 AST,打印出以下错误: Traceback (most recent call last): File "C:\Work\RE\Tools\VarsExpo
pycparser 是否支持用户自定义类型?我想从 *.C 文件中获取用户定义类型作为返回类型的函数列表。 最佳答案 当然可以。您只想为 FuncDef 节点编写访问者。 FuncDef 包含一个De
我正在尝试使用带有访问者的 pycparser 为每个 IF 语句解析 C 代码。根据我的观察,它只访问没有嵌套 IF 的顶级节点。是故意的,还是我的代码有问题? 最佳答案 查看类(class)评论:
当我尝试使用 pycparser 解析带有注释的文件时,我得到了 ParseError import pycparser parser = pycparser.CParser() parser.par
我目前正在开发一个项目,以查找给定 I/O 函数中的变量依赖关系,并选择使用 Pycparser。我现在的代码大部分只是一个访问者类和一些节点类。它的作用是遍历 AST 并为每个变量赋值、声明、输入、
我找到了以下示例来搜索特定函数名称,例如 malloc,但我想查找 C 源文件的函数声明中的所有函数名称。因此,在 ReturnCode HashCreate(Hash** hash, unsigne
我使用 pycparser 来解析 C 代码,对于我的测试文件,它工作正常。我在 cpp 和头文件方面遇到了一些问题,所以我使用外部 cpp 并将预处理器的输出提供给 pycparser。使用我的测试
我需要在预处理的 C 代码上使用 pycparser(由 'gcc -E' 产生的结果)。但是我目前遇到了我无法理解或解决的问题。 我正在使用提供的示例 year2.c 和 func_defs.py,
我正在尝试使用 pycparser解析此 C 代码: https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb7
pycparser 无法解析以下类型的语法。任何建议如何处理这种语法?或者我必须编写单独的模块来删除 pycparser 不支持的语法。 static __inline unsigned int __
我是解析方面的新手,我正在尝试使用 Pycparser 来解析我的 c 文件,我按照说明预处理文件 gcc -E 然后我使用示例文件夹中的 using_gcc_E_libc.py 并传递我的文件,我得
我正在使用最新版本的诗歌 (1.1.10) 并且在尝试更新我的锁定文件时,在尝试安装 pycparser==2.20 时遇到了错误: Writing lock file Package operati
让我们首先考虑这个片段: import sys from pycparser import c_parser, c_ast, c_generator text = r""" void main() {
注意:熟悉 pycparser 的人会更好地理解这个问题。 我正在使用pycparser v2.10 和我试图提取 C 文件中定义的所有函数,并在解析该 C 文件时提取其输入参数名称和标识符类型(使用
我正在使用 pycparser 来解析一些 C 代码。具体来说,我需要代码的某些部分,包括在 pycparser 中的是一些访问者,例如 visit_If 来访问代码的 "If" 部分。但是,我在访问
我需要用 pycparser 解析我的 C 和 C++ 代码, 但之前需要去除预处理器指令和注释。 那么,你知道有什么方法可以做到这一点吗?我找到了 CPP预处理器,但我不知道我是否可以像那样使用它而
我们可以通过在 pycparser parse_file 的帮助下对其进行预处理来支持新的 typedef、#includes 和 #defines。我还查看了文档:README 页面和博客文章,但所
我正在尝试修改/重构输入的 C 源代码。我试图在输入代码的每一行之后添加一个 printf 语句。 例如如果我的输入是 - void foo(){ // Sample input code
我使用 pycparser 和 pycparserext 编写了以下程序: from pycparser import parse_file,c_parser, c_ast, c_generator
我是一名优秀的程序员,十分优秀!