est-il un organisme qui peut dire comment créer la table des symboles pour le compilateur en utilisant C.créer la table des symboles
Répondre
La norme Stack ressources de débordement pour les compilateurs de construction et d'interprètes est Learning to write a compiler
Cela appartient à un commentaire. Et la plupart de ces ressources supposent que le programmeur en sait assez sur son langage d'implémentation pour ne pas avoir à poser cette question de base. – dmckee
C'est la partie la plus facile imo, une fois vous avez votre parser fonctionnant, quand vous rencontrez des identifiants dans votre grammaire vous avez déjà toutes les informations sur eux, les types, s'ils font partie d'une règle de grammaire de fonction ou non, et s'ils font partie d'une déclaration/définition de fonction , vous avez tous les paramètres avec leurs types. Une fois que vous avez identifié toutes ces informations, la table de symboles la plus basique (globales uniquement) consiste à construire une liste de syndicats d'un nom et d'un type (une variable) ou un nom, un type et une liste de noms. type combos (fonction). Vous pouvez les séparer avec un drapeau ou quelque chose. Une fois cela fait, vous pouvez l'imbriquer davantage pour les fonctions et plus tard sur la portée, créant ainsi une table de symboles de style c. À la fin, pendant la phase de génération du code, c'est là que vous allez écrire les registres/étiquettes que vos symboles utiliseront, alors assurez-vous qu'il est facilement extensible; vous allez revenir beaucoup à ce référentiel pour ajouter des données de comptabilité. La partie la plus délicate est la migration de l'information pendant que vous analysez toujours votre grammaire. Cela se fait généralement avec une grande structure que vous remplissez lorsque vous le lisez. Prenez une déclaration int f(int x, int y)
de style C: une fois que vous avez analysé int f
, vous ne savez pas si vous analysez encore une fonction ou une variable, vous devez donc remplir votre structure avec juste le nom et le type, puis la transmettre au Abaissez les noeuds de l'arbre (dans le cas d'un analyseur de descente récursif) et laissez-les y faire face, puis une fois qu'ils ont terminé, retournez la structure à l'appelant afin qu'ils aient l'information complète, même si vous, dans les fonctions spécifiques, N'avez aucune idée de ce que vous êtes en train d'analyser.
Absolument la chose la plus simple que vous pouvez faire est de fournir un tableau de structures. Quelque chose comme:
typedef struct {
char *name;
char type; /* i for int, s for string ... */
value union {
int i;
char c;
char *s;
float f;
}
} symbol;
symbol stable[MAX_SYMBOLS];
int symbolCount=0;
et un ensemble de routines pour le manipuler.
Vous aurez besoin:
int isDefined(char *name); /* returns trye if the named symbol already exists */
symbol* addSymbol(char *name, char type); /* Adds a symbol; returns a pointer to it */
symbol* getSymbol(char *name); /* returns a pointer to the named symbol or NULL */
Une fois que cela fonctionne, vous voulez
- Débarrassez-vous de la table de symboles globale, et en faire un paramètre à tout ce que vous routines
- remplacer le tableau fixe méchant et inefficace avec un arbre ou une table de hachage
Rechercher comment faire ah table en frêne claveté sur ficelle. C'est la façon standard de le faire.
- 1. Problème de débordement de la table des symboles dans Ruby
- 2. Comment accéder à la table des symboles dans Ruby?
- 3. ld signale des symboles manquants, mais des symboles semblent exister
- 4. Aucune table de symboles dans Go?
- 5. Modifier la table pour créer des colonnes pour l'autre table
- 6. De retour d'une table de symboles de la bibliothèque partagée
- 7. Liste des symboles inutilisés
- 8. Suppression des symboles redondants de la chaîne
- 9. Nom de ces colonnes dans ma table de symboles
- 10. Comment créer une table de symboles si une grammaire est donnée dans un fichier yacc?
- 11. PHP Extract2 - Comment affecter des vars dans la table de symboles actuelle?
- 12. Quelles sont les significations des colonnes de la table de symboles affichées par readelf?
- 13. soustraire des symboles dans ruby
- 14. Vim: couleur des symboles C++
- 15. PrivateFontCollection me donner des symboles
- 16. Créer Table Autre Changer table
- 17. Comment créer des clés étrangères pour la table de jonction
- 18. comment créer Table des Matières (TOC) via la macro
- 19. Comment créer des symboles d'impression gdb dans des bibliothèques partagées chargées avec dlopen?
- 20. XPerfView lent à charger des symboles
- 21. Impossible de créer la table dans jQuery
- 22. Table de symboles pour le débogage dans Windows
- 23. Comment prendre en compte la portée lors de la construction d'une table de symboles avec yacc?
- 24. Lecture d'une autre table de symboles de paquets en Perl
- 25. latex et unicode: comment écrire des symboles spéciaux d'autres scripts, ou importer des symboles?
- 26. La table enfant DB2 ne fonctionne pas - Créer une table
- 27. Créer une table PDF
- 28. erreur MySQL 1005 sur la table créer
- 29. Créer une table jQuery
- 30. gcc: Activation des symboles de débogage dans la bibliothèque partagée
Vous voulez dire que le compilateur est écrit en C? Ou compile-t-il le code C? – zedoo
ı besoin d'asymbol table en utilisant la table de hachage pour stocker la déclaration, les types de fonction, etc – iva