首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pycparser解析器在注释上失败

Pycparser解析器在注释上失败
EN

Stack Overflow用户
提问于 2013-05-30 12:58:08
回答 1查看 4.8K关注 0票数 4

当我试图使用pycparser解析带有注释的文件时,我得到了ParseError

代码语言:javascript
复制
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不支持源代码中的注释,但是这叉子允许这样做,或者可以使用问题删除C和C++注释的Python片段的配方从源代码中删除注释。

代码语言:javascript
复制
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;}"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-16 23:04:35

实际上,the解析器不解析注释,也不解析与C预处理器相关的任何内容(在普通C编译器中,预处理器在编译器看到注释之前剥离注释)。

要阻止注释破坏您的解析,首先通过预处理器运行代码,如run解析器README中所建议的那样。不幸的是,要真正有意义地解析注释(并获取它们的内容),not解析器并不是正确的工具。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16836878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档