gpt4 book ai didi

python - Pycparser 评论失败

转载 作者:太空狗 更新时间:2023-10-30 02:32:40 29 4
gpt4 key购买 nike

当我尝试使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com