Question

Si je voulais modifier ou ajouter mes propres extensions à C et les ajouter au compilateur GCC, que dois-je faire? Je ne veux pas proposer de changements au langage, je veux savoir comment le compilateur C fonctionne réellement.

J'ai consulté le code source de GCC et j'ai l'impression que Objective-C est implémenté comme un simple analyseur qui génère du code qui fait référence à une bibliothèque d'exécution modifiée, puis à tout ce qui est basé sur C utilise le compilateur C régulier. Je ne l'ai pas étudié de manière approfondie, je ne suis donc probablement pas sur la bonne voie.

Par exemple, je voulais ajouter mon propre mot-clé à Objective-C, juste pour le plaisir. Je souhaite ajouter quelque chose qui semble facile à implémenter, comme peut-être @assert . Tout ce que je veux, c'est que @assert appelle une fonction que j'ajouterai au runtime d'Objective-C:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");

Évidemment, je pourrais tout simplement l'implémenter en tant qu'appel de fonction et macro de toute façon, mais je souhaite mieux comprendre les étapes d'analyse et de compilation du code source C, et peut-être pourrais-je ajouter mes propres extensions à un langage pour mon propre usage .

Le code source que j'ai consulté se réfère systématiquement à "arbres". et il y a beaucoup, beaucoup de macros qui effectuent des actions ou obtiennent des informations de ces arbres.

Existe-t-il une documentation qui explique ce genre de chose en profondeur?

Était-ce utile?

La solution

Les arbres sont probablement arbres de syntaxe abstraite (AST) et tout livre de compilation sera enseigné. cette. Le livre du dragon est très classique, à la classe que j'ai suivie nous avons utilisé L’essence des compilateurs de Robin Hunter, ISBN 0-13-727835-7. Vous devriez également être en mesure de trouver tonnes de matériel provenant de différents collèges et universités avec quelques bons termes de recherche (conception du compilateur, AST, analyse lexicale, analyse top-down, analyse sémantique, LL , LR).

Autres conseils

Cela dépend si vous êtes déjà familiarisé avec les compilateurs en général ou non. Sinon, commencez par le Livre des dragons . Si oui, alors GCC a déjà de la documentation pour vous:

  1. Manuel de GCC Internals
  2. Le Wiki de GCC , en particulier le Mise en route contient des informations sur de nombreux éléments, y compris les arbres GCC.

Cela dépend de la façon dont vous le faites - mais vous voudrez peut-être rechercher l'implémentation GCC du langage de programmation D - GCD . Il s’agit d’un travail en cours, mais c’est un langage complet qui est implémenté dans le cadre de GCC sans (pour l’instant) beaucoup de reconnaissance, voire aucune, de la part de l’équipe GCC. Les expériences GCD pourraient être salutaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top