Exemple de table des symboles
Code LSD010 analysé
void main() { { integer k; boolean b; void foo() { { integer k; void foo2(){{}} } return(true); } integer foo; boolean foo3; } k=2; foo3=b; b=3<k; }
Affichage console de l'analyse
;
; LSD010 Compiler [SSHD09]
;
;
; Creating Symbols Table
; Using Test file...true
; Calling yyparse()
; End of yyparse execution;
; Filling Table of symbol...
; Warning : 'Print tree not requested (use DEB_I level minimum to print it)' On lsd10.y, Line 616
; -------------------------------------------------------------
;
; Checking types...
;
; Adding main declaration into symbols table on symbolsTable.c, line 236;
; Adding k declaration into symbols table on symbolsTable.c, line 236;
; Adding b declaration into symbols table on symbolsTable.c, line 236;
; Adding foo declaration into symbols table on symbolsTable.c, line 236
; Adding k declaration into symbols table on symbolsTable.c, line 236
;------A scope exists for k (k);
; Adding foo declaration into symbols table on symbolsTable.c, line 236;
; Adding foo3 declaration into symbols table on symbolsTable.c, line 236
;------Collision detected for foo3 hash (foo2 found on 0x8dcb0d8)
;Search for k (0x8dcfd58) on 1 scope (0x8dcb0c8)
;------Nothing found for k (0x8dcfd58) on 1 scope
;------Try to search on parent scope for k (0x8dcfd58) on 0x8dcb068
;Search for k (0x8dcfd58) on 1 scope (0x8dcb068)
;------Found k (0x8dcfd58)
;Search for foo3 (0x8dcfe40) on 1 scope (0x8dcb118)
;------Found foo3 (0x8dcfe40)
;Search for b (0x8dcfe98) on 1 scope (0x8dcb088)
;------Found b (0x8dcfe98)
;Search for b (0x8dcff38) on 1 scope (0x8dcb088)
;------Found b (0x8dcff38)
;Search for k (0x8dcffd8) on 1 scope (0x8dcb0c8)
;------Nothing found for k (0x8dcffd8) on 1 scope
;------Try to search on parent scope for k (0x8dcffd8) on 0x8dcb068
;------Search for k (0x8dcffd8) on 1 scope (0x8dcb068)
;------Found k (0x8dcffd8)
; ...OK Types check done
;
; Cleaning memory...
; ...OK Memory cleaned
;
;
; Parsing started at Thu Jul 22 15:41:44 2010
; 647 lines 10500 chars parsed in 0.12 seconds
; Verbose set on "Minimum excution messages" level
;
; That's All Folks!
OK
Nous pouvons remarquer que le compilateur a détecté une re-déclaration de la variable k en cours d'analyse.
En effet, elle est déclarée à la ligne 4 dans la fonction main, et elle est masquée par une nouvelle déclaration dans une portée inférieure ligne 9 dans la fonction foo. Comme le compilateur avait déjà créé une entrée dans la table des symboles, il lui a suffit d'ajouter la nouvelle déclaration au sommet de la pile de portées.
Notre implémentation nous retourne une adresse différente pour des fonctions ou des variables, ce qui fait que la déclaration de la variable foo ne se trouve pas en conflit avec la déclaration de la fonction foo.
Comme l'algorithme de hachage de la table de symboles ne nous assure pas forcément des résultats différents pour des identifiants différents, nous pouvons avoir des collisions. C'est ce que nous pouvons constater ici avec la déclaration de la variable foo3 qui produit le même résultat que la déclaration de la fonction foo2. Ce n'est pas un problème car nous utilisons une liste chaînée pour gérer les collisions.
AST [“Abstract Syntaxic Tree”2] généré
Nous pouvons voir sur cette image que notre AST est un arbre syntaxique réduit. En effet, certains tests lors de l'analyse permettent de ne pas créer certains nœuds inutiles.
Le nœud racine est représenté par un double cercle, les nœuds fils de droite par un rectangle, et les fils de gauche par un hexagone. De plus, les déclarations sont dans une autre couleur.
Etats de la table des symboles LSD010
Le compilateur permet de générer un document HTML qui reprend les différents états de la table de symboles, afin de faciliter la recherche d'erreurs et la compréhension deson fonctionnement.
Quand au moins deux cellules contiguës de la table sont comportent des valeurs nulles, une ellipse est automatiquement effectuée afin de faciliter la lecture.
Entrée dans la portée (portée actuelle : 1)-
Index | Liste chaînée de SymTableEntry | ||
0…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…99 | NULL |
Entrée dans la portée (portée actuelle : 2)-
Index | Liste chaînée de SymTableEntry | ||
0 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 6 | 7 | |
1…6 | NULL | ||
7 | Pile du symbole k | ||
Portée | Ligne | Col | |
1 | 4 | 9 | |
8…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…97 | NULL | ||
98 | Pile du symbole b | ||
Portée | Ligne | Col | |
1 | 5 | 9 | |
99 | NULL |
Entrée dans la portée (portée actuelle : 3)-
Index | Liste chaînée de SymTableEntry | ||
0 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 6 | 7 | |
1…6 | NULL | ||
7 | Pile du symbole k | ||
Portée | Ligne | Col | |
2 | 9 | 9 | |
1 | 4 | 9 | |
8…34 | NULL | ||
35 | Pile du symbole foo2 | ||
Portée | Ligne | Col | |
2 | 10 | 8 | |
36…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…97 | NULL | ||
98 | Pile du symbole b | ||
Portée | Ligne | Col | |
1 | 5 | 9 | |
99 | NULL |
Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 2)-
Index | Liste chaînée de SymTableEntry | ||
0 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 6 | 7 | |
1…6 | NULL | ||
7 | Pile du symbole k | ||
Portée | Ligne | Col | |
2 | 9 | 9 | |
1 | 4 | 9 | |
8…34 | NULL | ||
35 | Pile du symbole foo2 | ||
Portée | Ligne | Col | |
2 | 10 | 8 | |
36…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…97 | NULL | ||
98 | Pile du symbole b | ||
Portée | Ligne | Col | |
1 | 5 | 9 | |
99 | NULL |
Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 1)-
Index | Liste chaînée de SymTableEntry | ||
0 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 6 | 7 | |
1…6 | NULL | ||
7 | Pile du symbole k | ||
Portée | Ligne | Col | |
2 | 9 | 9 | |
1 | 4 | 9 | |
8…34 | NULL | ||
35 | Pile du symbole foo2 | ||
Portée | Ligne | Col | |
2 | 10 | 8 | |
36…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…97 | NULL | ||
98 | Pile du symbole b | ||
Portée | Ligne | Col | |
1 | 5 | 9 | |
99 | NULL |
Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 0)-
Index | Liste chaînée de SymTableEntry | ||
0 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 6 | 7 | |
1…6 | NULL | ||
7 | Pile du symbole k | ||
Portée | Ligne | Col | |
2 | 9 | 9 | |
1 | 4 | 9 | |
8…34 | NULL | ||
35 | Pile du symbole foo3 | ||
Portée | Ligne | Col | |
1 | 15 | 12 | |
Pile du symbole foo2 | |||
Portée | Ligne | Col | |
2 | 10 | 8 | |
36…86 | NULL | ||
87 | Pile du symbole main | ||
Portée | Ligne | Col | |
0 | 1 | 8 | |
88…97 | NULL | ||
98 | Pile du symbole b | ||
Portée | Ligne | Col | |
1 | 5 | 9 | |
99 | Pile du symbole foo | ||
Portée | Ligne | Col | |
1 | 14 | 11 |
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 22/07/2010 gemaakt, de laatste keer de 28/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/langages-table-des-symboles-exemple.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.
- ↑a,b LSD010 : Langage Simple et Didactique Il existe une un certain nombre d'interprétations de l'acronyme LSD (Langage Symbolique Didactique, Langage Sans Difficulté, Langage Simple et Didactique). LSD010 est la version 2010 de la suite LSD80, LSD_02, LSD03, LSD04, LSD05, LSD06, LSD07, LSD08, et LSD09.
Referenties
- IHDCB332 - Théorie des langages : Syntaxe et sémantique : PY Schobbens,
Syntaxe et sémantique
(January 2010) - Compilateurs : Dick Grune, Henry E. Bal, Ceriel J.H. Jacobs, Koen G. Langendoen,
Cours et exercices corrigés
- Compilateurs : A. Aho, M. Lam, R. Sethi, J. Ulman,
Principes; techniques et outils
Deze verwijzingen en links verwijzen naar documenten die geraadpleegd zijn tijdens het schrijven van deze pagina, of die aanvullende informatie kunnen geven, maar de auteurs van deze bronnen kunnen niet verantwoordelijk worden gehouden voor de inhoud van deze pagina.
De auteur Deze site is als enige verantwoordelijk voor de manier waarop de verschillende concepten, en de vrijheden die met de referentiewerken worden genomen, hier worden gepresenteerd. Vergeet niet dat u meerdere broninformatie moet doorgeven om het risico op fouten te verkleinen.