Difference between revisions of "Symbol tables/fr"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{Symbol_tables}} Retour au contenu FPC internals = Tables de symboles = == Architecture == {{Warning|Last updated for FPC version 1.0.x}} The symbol...")
 
 
(8 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
== Architecture ==
 
== Architecture ==
  
{{Warning|Last updated for FPC version 1.0.x}}
+
{{Warning|Dernière mise à jour pour FPC version 1.0.x}}
  
The symbol table contains all definitions for all symbols in the compiler. It also contains all type information for all symbols encountered during the parsing process. All symbols and definitions are streamable, and are used within PPU files to avoid recompiling everything to verify if all symbols are valid.
+
La table des symboles contient toutes les définitions pour tous les symboles dans le compilateur. Il contient aussi toute information de type de tous les symboles rencontrés pendant le processus d'analyse. Tous les symboles sont accessibles sous forme de flux et sont utilisés dans les fichiers PPU pour éviter de tout recompiler pour vérifier si tous les symboles sont valides.
  
There are different types of symbol tables, all of which maybe active at one time or another depending on the context of the parser.
+
Il y a différents types de tables de symboles, qui peuvent tous être actives à un moment ou à un autre selon le contexte de l'analyseur.
  
An architectural overview of the interaction between the symbol tables, the symbol entries and the definition entries is displayed in figure 4.1.
+
Une vue d'ensemble architecturale de l'interaction entre les tables de symboles, les entrées de symboles et les entrées de définition est présentée dans la figure 4.1.
  
As can be seen, the symbol table entries in the symbol table are done using the fast hashing algorithm with a hash dictionary.
+
Comme cela peut être vu, les entrées de tables de symboles sont faites en utilisant un algorithme de hachage rapide avec un dictionnaire d'empreinte (''hash dictionary'').
  
 
== L'Objet Table de symboles ==
 
== L'Objet Table de symboles ==
Line 21: Line 21:
 
{{Warning|Dernière mise à jour pour FPC version 2.5.1}}
 
{{Warning|Dernière mise à jour pour FPC version 2.5.1}}
  
All symbol tables in the compiler are from this type of object, which contains fields for the total size of the data in the symbol table, and methods to read and write the symbol table into a stream. The start of the linked list of active symbol tables is the '''symtablestack''' variable.
+
Toutes les tables de symboles dans le compilateur proviennent de ce type d'objet, qui contient des champs pour la taille totale des donnnées dans la table de symboles, et des méthodes pour lire la table de symboles dans un flux. Le départ de la liste chaînée des tables de symboles actives est la variable '''symtablestack'''.
  
 
http://www.pjh2.de/fpc/CompilerInternalsFigure04.png
 
http://www.pjh2.de/fpc/CompilerInternalsFigure04.png
Line 27: Line 27:
 
<syntaxhighlight lang=pascal>
 
<syntaxhighlight lang=pascal>
 
type
 
type
   TSymTable = class
+
   TSymTable = classu
 
     name: pshortstring;              // uppercased realname
 
     name: pshortstring;              // uppercased realname
 
     realname  : pshortstring;        // used to generate long symbol names (like symble.name + '.' + sym.name)
 
     realname  : pshortstring;        // used to generate long symbol names (like symble.name + '.' + sym.name)
     DefList  : TFPObjectList;        // list of definintions
+
     DefList  : TFPObjectList;        // list of definitions
 
     SymList  : TFPHashObjectList;    // list of symbols
 
     SymList  : TFPHashObjectList;    // list of symbols
     defowner  : TDefEntry;            // The owner definition. Valud for records, objects and enumerations.
+
     defowner  : TDefEntry;            // The owner definition. Value for records, objects and enumerations.
 
     moduleid  : longint;              // unit index
 
     moduleid  : longint;              // unit index
 
     refcount  : smallint;            // count of references. if few objects shares the same
 
     refcount  : smallint;            // count of references. if few objects shares the same
Line 45: Line 45:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The type of possible symbol tables are shown in the following table:
+
Le type des tables de symboles possibles sont montrés dnas la table suivante:
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Champ !! Description
 
! Champ !! Description
 
|-  
 
|-  
| abstractsymtable || Default value when the symbol table is created and its type is not defined. Used for debugging purposes
+
| abstractsymtable || Valeur par défaut quand la tables est créée et que son type n'est pas défini. Utilisé à des fins de mise au point
 
|-  
 
|-  
| WithSymTable || All symbols accessed in a with statement
+
| WithSymTable || Tous les symboles accédés dans une instruction with
 
|-  
 
|-  
| StaticSymTable || Contains unit implementation or program symbols
+
| StaticSymTable || Contient les symboles de la partie implémentation de l'unité ou du programme
 
|-  
 
|-  
| GlobalSymTable || Contains unit interface symbols
+
| GlobalSymTable || Contient les symboles de l'interface de l'unité
 
|-  
 
|-  
| ObjectSymTable || Contains all symbols within an object/class/interface/objc class and other object types statement
+
| ObjectSymTable || Contient tous les symboles dans un objet/une classe/une interface/une classe objc et les autres instructions de types d'objet
 
|-  
 
|-  
| RecordSymTable || Contains all symbols within a record statement
+
| RecordSymTable || Contient tous les symboles dans une instruction records
 
|-  
 
|-  
| LocalSymTable || Hold symbols for all local variables of a routine
+
| LocalSymTable || Tient les symboles pour toutes les variables locales d'une routine
 
|-  
 
|-  
| ParaSymTable || Holds symbols for all parameters of a routine (the actual parameter declaration symbols)
+
| ParaSymTable || Tient les symboles pour tous les paramètres d'une routine (les symboles de déclaration de paramètre effectif)
 
|-  
 
|-  
| Stt_ExceptSymTable || Contains all exception symbols defined in the except block
+
| Stt_ExceptSymTable || Contient tous les symboles d'exception définis dans un bloc except
 
|-  
 
|-  
| exportedmacrosymtable || Holds all exported macros
+
| exportedmacrosymtable || Tient toutes les macros exportées
 
|-  
 
|-  
| localmacrosymtable || Holds all macros currently in scope
+
| localmacrosymtable || Tient toutes les macros actuellement dans la portée
 
|-  
 
|-  
| enumsymtable || Contains all enumeration elements symbols of an enumeration
+
| enumsymtable || Contient tous les symboles d'éléments d'une énumération
 
|}
 
|}
  
Line 78: Line 78:
 
''(Dernière mise à jour pour FPC version 1.0.x)''
 
''(Dernière mise à jour pour FPC version 1.0.x)''
  
To add a symbol into a specific symbol table, that’s symbol table’s Insert method is called, which in turns call the Insert_In_Data method of that symbol. Insert_In_Data, depending on the symbol type, adjusts the alignment and sizes of the data and actually creates the data entry in the correct segment.
+
Pour ajouter un symbole dans une table de symboles spécifique, La méthode Insert de la table de symboles est appelée, qui en retour appelle la méthode Insert_In_Data de ce symbole. Insert_In_Data, selon le type de symbole, ajuste l'alignement et la taille de la donnée et créée effectivement l'entrée de donnée dans le segment correct.
  
 
http://www.pjh2.de/fpc/CompilerInternalsFigure05.png
 
http://www.pjh2.de/fpc/CompilerInternalsFigure05.png
Line 92: Line 92:
 
| Déclaration: || <tt><b>function</b> Search_a_Symtable(<b>const</b> Symbol: String; SymTableType: TSymTableType): PSym;</tt>
 
| Déclaration: || <tt><b>function</b> Search_a_Symtable(<b>const</b> Symbol: String; SymTableType: TSymTableType): PSym;</tt>
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| Description: || Search for a symbol Symbol in a specified symbol table SymTableType. Returns NIL if the symbol table is not found, and also if the symbol cannot be found in the desired symbol table.
+
| Description: || Recherche un symbole dans la table de symboles spécifiée SymTableType. Retorune Nil si la table de symboles n'est pas trouvée et aussi si le symbole ne peut pas être trouvé dans la table voulue.
 
|}
 
|}
  
Line 100: Line 100:
 
| Déclaration: || <tt><b>procedure</b> GetSym(<b>const</b> S: StringId; NotFoundError: Boolean);</tt>
 
| Déclaration: || <tt><b>procedure</b> GetSym(<b>const</b> S: StringId; NotFoundError: Boolean);</tt>
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| Description: || Search all the active symbol tables for the symbol s,setting the global variable SrSym to the found symbol, or to nil if the symbol was not found. notfounderror should be set to TRUE if the routine must give out an error when the symbol is not found.
+
| Description: || Recherche le symbole s dans toutes les tables de symboles active, définit la variable globale SrSym avec le symbole trouvé, ou avec Nil si le symbole n'a pas été trouvé. Il faut que notfounderror soit définie à TRUE, si la routine doit donner une erreur lorsque le symbole n'est pas trouvé.
 
|}
 
|}
  
Line 108: Line 108:
 
| Déclaration: || <tt><b>function</b> GlobalDef(<b>const</b> S: String): PDef;</tt>
 
| Déclaration: || <tt><b>function</b> GlobalDef(<b>const</b> S: String): PDef;</tt>
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| Description: || Returns a pointer to the definition of the fully qualified type symbol S, or NIL if not found.
+
| Description: || Retourne un pointeur vers la définition du symbole de type pleinement qualifé S, ou Nil si non trouvé. Notes: Il est pleinement qualifié, en ce que le symbole system.byte, par exemple, sera entièrement résolu en une unité et un composant de type octet. Le symbole doit avoir une portée globale et il doit s'agir d'un symbole de type, sinon NIL sera renvoyé.
Notes: It is fully qualified, in that the symbol system.byte, for example, will be fully resolved to a unit and byte type component The symbol must have a global scope, and it must be a type symbol, otherwise NIL will be returned.
 
 
|}
 
|}
  
Line 119: Line 118:
 
| Déclaration: || <tt><b>var</b> SrSym: PSym;</tt>
 
| Déclaration: || <tt><b>var</b> SrSym: PSym;</tt>
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| Description: || This points to the symbol entry found, when calling getsym.
+
| Description: || Celle-ci pointe vers une entrée de symbole trouvée, après l'appel à getsym.
 
|}
 
|}
  
Line 127: Line 126:
 
| Déclaration: || <tt><b>var</b> SrSymTable: PSymTable;</tt>
 
| Déclaration: || <tt><b>var</b> SrSymTable: PSymTable;</tt>
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| Description: || This points to the symbol table of the symbol [[#SrSym|SrSym]] when calling [[#GetSym|GetSym]].
+
| Description: || Celle-ci pointe vers la table de symboles [[#SrSym|SrSym]] après l'appel à [[#GetSym|GetSym]].
 
|}
 
|}
  
 
Prochain chapitre: [[Symbol entries/fr|Entrée de table de symboles]]
 
Prochain chapitre: [[Symbol entries/fr|Entrée de table de symboles]]

Latest revision as of 13:32, 25 December 2020

English (en) français (fr)

Retour au contenu FPC internals

Tables de symboles

Architecture

Warning-icon.png

Avertissement: Dernière mise à jour pour FPC version 1.0.x

La table des symboles contient toutes les définitions pour tous les symboles dans le compilateur. Il contient aussi toute information de type de tous les symboles rencontrés pendant le processus d'analyse. Tous les symboles sont accessibles sous forme de flux et sont utilisés dans les fichiers PPU pour éviter de tout recompiler pour vérifier si tous les symboles sont valides.

Il y a différents types de tables de symboles, qui peuvent tous être actives à un moment ou à un autre selon le contexte de l'analyseur.

Une vue d'ensemble architecturale de l'interaction entre les tables de symboles, les entrées de symboles et les entrées de définition est présentée dans la figure 4.1.

Comme cela peut être vu, les entrées de tables de symboles sont faites en utilisant un algorithme de hachage rapide avec un dictionnaire d'empreinte (hash dictionary).

L'Objet Table de symboles

Warning-icon.png

Avertissement: Dernière mise à jour pour FPC version 2.5.1

Toutes les tables de symboles dans le compilateur proviennent de ce type d'objet, qui contient des champs pour la taille totale des donnnées dans la table de symboles, et des méthodes pour lire la table de symboles dans un flux. Le départ de la liste chaînée des tables de symboles actives est la variable symtablestack.

http://www.pjh2.de/fpc/CompilerInternalsFigure04.png

type
  TSymTable = classu
    name: pshortstring;               // uppercased realname
    realname  : pshortstring;         // used to generate long symbol names (like symble.name + '.' + sym.name)
    DefList   : TFPObjectList;        // list of definitions
    SymList   : TFPHashObjectList;    // list of symbols
    defowner  : TDefEntry;            // The owner definition. Value for records, objects and enumerations.
    moduleid  : longint;              // unit index
    refcount  : smallint;             // count of references. if few objects shares the same
                                      // symbol table - they add a new reference instead of 
                                      // full copying the symbols
    currentvisibility : tvisibility;  // current visibility of symtable - used while parsing object members
                                      // to put them into symtable with the correct visibility
    currentlyoptional : boolean;      // used while parsing of objc protocol
    symtablelevel : byte;             // level of symtable, used for nested procedures
    symtabletype  : TSymtabletype;    // Indicates the type of this symbol table (2).
  end;

Le type des tables de symboles possibles sont montrés dnas la table suivante:

Champ Description
abstractsymtable Valeur par défaut quand la tables est créée et que son type n'est pas défini. Utilisé à des fins de mise au point
WithSymTable Tous les symboles accédés dans une instruction with
StaticSymTable Contient les symboles de la partie implémentation de l'unité ou du programme
GlobalSymTable Contient les symboles de l'interface de l'unité
ObjectSymTable Contient tous les symboles dans un objet/une classe/une interface/une classe objc et les autres instructions de types d'objet
RecordSymTable Contient tous les symboles dans une instruction records
LocalSymTable Tient les symboles pour toutes les variables locales d'une routine
ParaSymTable Tient les symboles pour tous les paramètres d'une routine (les symboles de déclaration de paramètre effectif)
Stt_ExceptSymTable Contient tous les symboles d'exception définis dans un bloc except
exportedmacrosymtable Tient toutes les macros exportées
localmacrosymtable Tient toutes les macros actuellement dans la portée
enumsymtable Contient tous les symboles d'éléments d'une énumération

Insertion de symboles dans une table de symboles

(Dernière mise à jour pour FPC version 1.0.x)

Pour ajouter un symbole dans une table de symboles spécifique, La méthode Insert de la table de symboles est appelée, qui en retour appelle la méthode Insert_In_Data de ce symbole. Insert_In_Data, selon le type de symbole, ajuste l'alignement et la taille de la donnée et créée effectivement l'entrée de donnée dans le segment correct.

http://www.pjh2.de/fpc/CompilerInternalsFigure05.png

Symbol table interface

(Dernière mise à jour pour FPC version 1.0.x)

Routines

Search_a_Symtable

Déclaration: function Search_a_Symtable(const Symbol: String; SymTableType: TSymTableType): PSym;
Description: Recherche un symbole dans la table de symboles spécifiée SymTableType. Retorune Nil si la table de symboles n'est pas trouvée et aussi si le symbole ne peut pas être trouvé dans la table voulue.

GetSym

Déclaration: procedure GetSym(const S: StringId; NotFoundError: Boolean);
Description: Recherche le symbole s dans toutes les tables de symboles active, définit la variable globale SrSym avec le symbole trouvé, ou avec Nil si le symbole n'a pas été trouvé. Il faut que notfounderror soit définie à TRUE, si la routine doit donner une erreur lorsque le symbole n'est pas trouvé.

GlobalDef

Déclaration: function GlobalDef(const S: String): PDef;
Description: Retourne un pointeur vers la définition du symbole de type pleinement qualifé S, ou Nil si non trouvé. Notes: Il est pleinement qualifié, en ce que le symbole system.byte, par exemple, sera entièrement résolu en une unité et un composant de type octet. Le symbole doit avoir une portée globale et il doit s'agir d'un symbole de type, sinon NIL sera renvoyé.

Variables

SrSym

Déclaration: var SrSym: PSym;
Description: Celle-ci pointe vers une entrée de symbole trouvée, après l'appel à getsym.

SrSymTable

Déclaration: var SrSymTable: PSymTable;
Description: Celle-ci pointe vers la table de symboles SrSym après l'appel à GetSym.

Prochain chapitre: Entrée de table de symboles