【问题标题】:C grammar in GCC source codeGCC 源代码中的 C 语法
【发布时间】:2010-04-27 12:24:16
【问题描述】:

我正在寻找 GCC 源代码中的 C 语法,更具体地说是 yacc/bison 形式的语法。

【问题讨论】:

  • 这更像是一个陈述而不是一个问题? (我决定将我的陈述表述为一个问题作为回报。有趣!)
  • 你试过谷歌搜索吗?我搜索了“c yacc 语法”,并找到了 lysator.liu.se/c/ANSI-C-grammar-y.html 以及许多其他命中。
  • @Neil,也许这不是 Hurkai 的意思,但是 GCC 有一些 C 扩展,而通用 C 语法并不完全适合它。
  • 我已经研究过 C 标准语法,但与 gcc 中使用的语法相比,它比较旧,这就是我寻找它的原因。
  • 简直无法理解……

标签: c gcc grammar yacc bison


【解决方案1】:

在文件“c-parse.y”中找到GCC 3.3版中Yacc规范中的C语法

【讨论】:

    【解决方案2】:

    您不会在当前的 GCC 源代码中找到 C 语法 yacc/bison 文件。它是在过去完成的,在 egcs fork 之前。我不能给你确切的版本和位置,但我可以告诉你它应该在 2.x 版本中

    当前版本的 GCC 有自己的 C 解析器

    【讨论】:

    • 那么在GCC源代码中有语法规范,对吧?用 GCC 自己的 C 解析器解析的那个。你知道我在哪个文件中找到它吗?
    • @Hurkai 您可以在 cmets 中找到执行解析的子例程 :-)
    【解决方案3】:

    4.3 版的 GCC 不包含明确编写的 C 语法。解析和语义分析是同时进行的,没有将语法树作为单独的数据结构呈现。

    信息来源:我看了GCC源码。

    【讨论】:

      【解决方案4】:

      多年前(可能至少 5 年),GCC 的 g++ 从基于 yacc (bison) 的解析器转换而来。他们开始使用递归的体面解析器,因为 C++ 在 yacc 中很困难。

      在 C++ 中使用这个解析器几年后,他们也将 C 转换为使用递归体面的解析器。

      你必须返回几个版本才能找到野牛格式的语法,但它就在那里。您应该尝试使用 google 的代码搜索

      gcc yyparse

      更新:2012 年 Google 代码搜索关闭

      http://en.wikipedia.org/wiki/Google_Code_Search

      旧:http://yaxx.googlecode.com/svn/branches/yaxx-proc/gcc-3.4.0/gcc/c-parse.y

      找到具有它的 gcc 版本,然后您应该能够在其中找到 yacc/bison 源文件。不过,它会很旧。

      【讨论】:

      • 我认为您的意思是 descent ,尽管解析器 decent 足够了 :)
      【解决方案5】:

      GCC 不使用生成的解析器;它的解析器是一个手写的递归下降解析器。

      【讨论】:

      • 从 4.6+ 版本开始是真的
      • @Jack:有趣!你能指出我的任何文件吗?我知道他们出于性能和(更重要的是)可维护性的原因将生成的解析器切换到新的手写解析器,可能在3.4-4.2时间范围左右(我不知道'不完全记得)。切换回来的原因是什么以及他们使用哪个解析器生成器?
      【解决方案6】:

      【讨论】:

        【解决方案7】:

        C 语法可以在 GCC 源代码的 c-parser.c 文件中的 cmets 中找到。 虽然它不是 yacc/bison,但正如它已经说过的那样。

        【讨论】:

          猜你喜欢
          • 2018-02-06
          • 2015-01-10
          • 1970-01-01
          • 2015-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-26
          相关资源
          最近更新 更多