2010-04-27 5 views
12

Je cherche la grammaire C dans le code source de GCC, plus spécifiquement pour la grammaire sous la forme yacc/bison.Grammaire C dans le code source GCC

+6

C'est plus une affirmation qu'une question? (J'ai décidé de rendre la pareille en formulant ma déclaration comme une question, amusante!) –

+0

Avez-vous essayé de googler? J'ai cherché "c yacc grammar" et est venu avec http://www.lysator.liu.se/c/ANSI-C-grammar-y.html parmi beaucoup d'autres succès. –

+0

@Neil, peut-être que ce n'est pas ce que Hurkai voulait dire, mais GCC a quelques extensions C, et la grammaire C générique ne lui correspondrait pas exactement. –

Répondre

12

trouvé la grammaire C dans la spécification Yacc dans la version 3.3 du CCG dans le fichier "c-parse.y"

+2

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

7

GCC de la version 4.3 ne contenait pas de grammaire C écrite explicitement. L'analyse syntaxique et sémantique a été effectuée simultanément, sans présenter l'arbre de syntaxe comme une structure de données distincte.

Source d'information: J'ai lu le code source de GCC.

10

Vous ne trouverez pas de fichier C grammar yacc/bison dans le code source GCC actuel. Cela a été fait dans le passé, avant les trucs de fourche egcs. Je ne peux pas vous donner la version exacte et l'emplacement, mais je peux vous dire qu'il devrait être dans la version 2.x

La version actuelle du CCG a son propre analyseur C

+0

Donc il y a une spécification de grammaire dans le code source de GCC, n'est-ce pas? Celui à analyser avec le propre analyseur C de GCC. Savez-vous dans quel fichier je le trouve? – Haruki

+0

@Hurkai vous pouvez le trouver dans les commentaires aux sous-programmes qui effectuent l'analyse :-) –

7

de g de GCC++ commuté d'un yacc (bison) parser ans (probablement au moins 5 ans). Ils ont commencé à utiliser un analyseur décent récursif parce que C++ est difficile dans yacc. Après avoir utilisé cet analyseur dans C++ pendant plusieurs années, ils ont changé C en analyse en utilisant décent récursive aussi bien.

Vous devrez revenir en arrière plusieurs versions pour localiser la grammaire en format bison, mais il est là-bas. Vous devriez essayer la recherche de code de Google avec

gcc yyparse

Mise à jour: Google Recherche de code d'arrêt en 2012

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

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

pour trouver une version de gcc cela l'a et alors vous devriez pouvoir trouver le dossier de source de yacc/bison dedans là. Ce sera vieux, cependant.

+6

Je pense que vous voulez dire _descent_, bien que l'analyseur soit assez _decent_ :) –

4

GCC n'utilise pas d'analyseur généré; son analyseur est un analyseur récursif-descendant écrit à la main.

+1

c'est vrai de la version 4.6+ – Jack

+1

@Jack: Intéressant! Pouvez-vous me diriger vers une documentation? Je sais qu'ils ont remplacé * par * un parseur généré * par le nouveau manuscrit pour des raisons de performance et (plus important encore) de maintenabilité, probablement quelque part autour de la période de temps 3.4-4.2 (je ne me souviens pas précisément). Quelles ont été les raisons du retour en arrière et quel générateur d'analyseur utilise-t-il? –

0

La grammaire C se trouvent dans les commentaires dans c-analyseur. c fichier dans les sources GCC. Ce n'est pas un yacc/bison comme il a déjà été dit.