Keine Cache-Version

Caching deaktiviert Standardeinstellung für diese Seite:aktiviert (code LNG204)
Wenn die Anzeige zu langsam ist, können Sie den Benutzermodus deaktivieren, um die zwischengespeicherte Version anzuzeigen.

Exemple de table des symboles

Code LSD010 analysé

  1. void main()
  2. {
  3. {
  4. integer k;
  5. boolean b;
  6. void foo()
  7. {
  8. {
  9. integer k;
  10. void foo2(){{}}
  11. }
  12. return(true);
  13. }
  14. integer foo;
  15. boolean foo3;
  16. }
  17. k=2;
  18. foo3=b;
  19. b=3<k;
  20. }

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.

Inhaltsverzeichnis Haut

AST [“Abstract Syntaxic Tree”2] généré

Partie récursive de l'AST

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.

Inhaltsverzeichnis Haut

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.

Inhaltsverzeichnis Haut

Entrée dans la portée (portée actuelle : 1)-

IndexListe chaînée de SymTableEntry
0…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…99NULL

Inhaltsverzeichnis Haut

Entrée dans la portée (portée actuelle : 2)-

IndexListe chaînée de SymTableEntry
0Pile du symbole  foo
PortéeLigneCol
167
1…6NULL
7Pile du symbole  k
PortéeLigneCol
149
8…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…97NULL
98Pile du symbole  b
PortéeLigneCol
159
99NULL

Inhaltsverzeichnis Haut

Entrée dans la portée (portée actuelle : 3)-

IndexListe chaînée de SymTableEntry
0Pile du symbole  foo
PortéeLigneCol
167
1…6NULL
7Pile du symbole  k
PortéeLigneCol
299
149
8…34NULL
35Pile du symbole  foo2
PortéeLigneCol
2108
36…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…97NULL
98Pile du symbole  b
PortéeLigneCol
159
99NULL

Inhaltsverzeichnis Haut

Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 2)-

IndexListe chaînée de SymTableEntry
0Pile du symbole  foo
PortéeLigneCol
167
1…6NULL
7Pile du symbole  k
PortéeLigneCol
299
149
8…34NULL
35Pile du symbole  foo2
PortéeLigneCol
2108
36…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…97NULL
98Pile du symbole  b
PortéeLigneCol
159
99NULL

Inhaltsverzeichnis Haut

Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 1)-

IndexListe chaînée de SymTableEntry
0Pile du symbole  foo
PortéeLigneCol
167
1…6NULL
7Pile du symbole  k
PortéeLigneCol
299
149
8…34NULL
35Pile du symbole  foo2
PortéeLigneCol
2108
36…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…97NULL
98Pile du symbole  b
PortéeLigneCol
159
99NULL

Inhaltsverzeichnis Haut

Sortie de la portée; déclarations non supprimées de la table (portée actuelle : 0)-

IndexListe chaînée de SymTableEntry
0Pile du symbole  foo
PortéeLigneCol
167
1…6NULL
7Pile du symbole  k
PortéeLigneCol
299
149
8…34NULL
35Pile du symbole  foo3
PortéeLigneCol
11512
Pile du symbole  foo2
PortéeLigneCol
2108
36…86NULL
87Pile du symbole  main
PortéeLigneCol
018
88…97NULL
98Pile du symbole  b
PortéeLigneCol
159
99Pile du symbole  foo
PortéeLigneCol
11411

Inhaltsverzeichnis Haut

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 22/07/2010, zuletzt geändert 28/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/langages-table-des-symboles-exemple.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Aufzeichnungen

  1. 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.

  2. a,b,c Abstract Syntaxic Tree : entspricht « arbre syntaxique abstrait » en français

  3. a,b AST : “Abstract Syntaxic Tree” (en français, « arbre syntaxique abstrait »)

Inhaltsverzeichnis Haut

Referenzen

  1. Buch Sprache des Dokuments:fr IHDCB332 - Théorie des langages : Syntaxe et sémantique : PY Schobbens, Syntaxe et sémantique (January 2010)
  2. Buch Sprache des Dokuments:fr Compilateurs : Dick Grune, Henry E. Bal, Ceriel J.H. Jacobs, Koen G. Langendoen, Cours et exercices corrigés
  3. Buch Sprache des Dokuments:fr Compilateurs : A. Aho, M. Lam, R. Sethi, J. Ulman, Principes; techniques et outils

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut