GCC源代码中的C语法

15

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


6
那更像是一个陈述而不是问题?(我决定回应并将我的陈述转化为问题。很有趣!) - Ed James
你试过谷歌搜索吗?我搜了“c yacc grammar”,找到了http://www.lysator.liu.se/c/ANSI-C-grammar-y.html以及其他很多相关结果。 - anon
@Neil,也许Hurkai的意思不是这样,但GCC有一些C扩展,通用的C语法并不完全适用。 - P Shved
我已经研究了C标准语法,但与gcc使用的语法相比,它已经过时了,这就是为什么我正在寻找它的原因。 - Haruki
1
这只是无法解析的... - bmargulies
7个回答

14

在文件"c-parse.y"中,我们可以找到GCC版本3.3中使用的Yacc规范中的C语法。


11

在当前的GCC源代码中,您将找不到C语言yacc/bison文件。在egcs分支之前的过去已经完成了。我不能告诉您确切的版本和位置,但我可以告诉您它应该在2.x版本中。

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


那么在GCC源代码中有一个语法规范,对吧?这个规范将使用GCC自己的C解析器进行解析。你知道我应该在哪个文件中找到它吗? - Haruki
@Hurkai,你可以在执行解析的子程序注释中找到它 :-) - P Shved

10
GCC的g++从几年前(可能至少5年)开始切换了基于yacc(bison)的解析器。他们开始使用递归下降解析器,因为C ++在yacc中很难解析。
在使用这个解析器解析C ++数年之后,他们也切换到使用递归下降解析器来解析C语言。
你将不得不回溯几个版本才能找到bison格式的语法,但它确实存在。你应该尝试使用"gcc yyparse"在Google的代码搜索中进行搜索。
更新:Google Code Search在2012年关闭。

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

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

要找到一个有这个版本的gcc,然后你就能在其中找到yacc/bison源文件。不过它会比较老。

(注:该段文字为编程相关内容,建议读者具备一定的编程知识)

6
我认为你的意思是“下降”,虽然解析器足够“像样” :) - Tim Post

9

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

信息来源:我阅读了GCC源代码。


6

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


2
从4.6版本开始,这是真的。 - Jack
1
@Jack:有趣!你能给我指一些文档吗?我知道他们出于性能和(更重要的)可维护性原因,从生成的解析器切换到了新的手写解析器,大概是在3.4-4.2时间范围内(我不太记得了)。他们切换回去的原因是什么,他们使用哪个解析器生成器? - Jörg W Mittag

5

0

C语言的语法可以在GCC源代码中的c-parser.c文件的注释中找到。 但它并不是yacc/bison。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接