gpt4 book ai didi

c++ - 创建 C/C++ 解析器/分析器的好工具

转载 作者:IT老高 更新时间:2023-10-28 14:00:21 26 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




有哪些好的工具可以快速开始解析和分析 C/C++ 代码?

特别是,我正在寻找处理 C/C++ 预处理器和语言的开源工具。这些工具最好使用 lex/yacc(或 flex/bison)作为语法,不要太复杂。他们应该处理最新的 ANSI C/C++ 定义。

这是我到目前为止发现的内容,但还没有详细研究它们(想法?):

  • CScope - 老式的 C 分析器。不过,似乎没有做完整的解析。被描述为用于查找 C 函数的美化“grep”。
  • GCC - 每个人都喜欢的开源编译器。非常复杂,但似乎做到了这一切。有一个用于创建 GCC 扩展的相关项目,名为 GEM ,但自 GCC 4.1 (2006) 以来未更新。
  • PUMA - 纯机械手。 (来自页面:“这个项目的意图是
    提供用于分析和操作 C/C++ 源代码的类库。为了这
    目的 PUMA 提供用于扫描、解析和当然操作 C/C++ 的类
    来源。”。这看起来很有希望,但自 2001 年以来一直没有更新。显然 PUMA 已被合并到 AspectC++ 中,但即使该项目自 2006 年以来也没有更新。
  • 各种 C/C++ 原始语法。您可以获得c-c++-grammars-1.2.tar.gz ,但自 1997 年以来一直没有维护。通过谷歌搜索可以找到其他基本的 lex/yacc 语法,这些语法可以作为起点。
  • 还有其他人吗?

  • 我希望以此为起点,将 C/C++ 源代码翻译成一种新的玩具语言。

    谢谢!
    -马特

    (添加于 2/9):只是澄清一下:除了 C/C++ 代码本身之外,我还想从预处理器中提取语义信息。我不希望“#define foo 42”消失在整数“42”中,但仍与名称“foo”相连。不幸的是,这排除了一些首先运行预处理器并且只提供 C/C++ 解析树的解决方案)

    最佳答案

    解析 C++ 非常困难,因为语法是不可判定的。报价 Yossi Kreinin :

    Outstandingly complicated grammar

    "Outstandingly" should be interpreted literally, because all popular languages have context-free (or "nearly" context-free) grammars, while C++ has undecidable grammar. If you like compilers and parsers, you probably know what this means. If you're not into this kind of thing, there's a simple example showing the problem with parsing C++: is AA BB(CC); an object definition or a function declaration? It turns out that the answer depends heavily on the code before the statement - the "context". This shows (on an intuitive level) that the C++ grammar is quite context-sensitive.

    关于c++ - 创建 C/C++ 解析器/分析器的好工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526797/

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