Sign in Join
Wiki copytemporary

Symbol tables/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Retour au contenu [[FPC internals/fr|FPC internals]]
22
33# Tables de symboles
44
55## Architecture
66
77> **Warning:** Dernière mise à jour pour FPC version 1.0.x
88
99La 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.
1010
1111Il 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.
1212
1313Une 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.
1414
1515Comme 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*).
1616
1717## L'Objet Table de symboles
1818
1919> **Warning:** Dernière mise à jour pour FPC version 2.5.1
2020
2121Toutes 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**.
2222
2323<http://www.pjh2.de/fpc/CompilerInternalsFigure04.png>
2424
2525``` pascal
2626type
2727 TSymTable = classu
2828 name: pshortstring; // uppercased realname
2929 realname : pshortstring; // used to generate long symbol names (like symble.name + '.' + sym.name)
3030 DefList : TFPObjectList; // list of definitions
3131 SymList : TFPHashObjectList; // list of symbols
3232 defowner : TDefEntry; // The owner definition. Value for records, objects and enumerations.
3333 moduleid : longint; // unit index
3434 refcount : smallint; // count of references. if few objects shares the same
3535 // symbol table - they add a new reference instead of
3636 // full copying the symbols
3737 currentvisibility : tvisibility; // current visibility of symtable - used while parsing object members
3838 // to put them into symtable with the correct visibility
3939 currentlyoptional : boolean; // used while parsing of objc protocol
4040 symtablelevel : byte; // level of symtable, used for nested procedures
4141 symtabletype : TSymtabletype; // Indicates the type of this symbol table (2).
4242 end;
4343```
4444
4545Le type des tables de symboles possibles sont montrés dnas la table suivante:
4646
4747| Champ | Description |
4848|----|----|
4949| 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 |
5050| WithSymTable | Tous les symboles accédés dans une instruction with |
5151| StaticSymTable | Contient les symboles de la partie implémentation de l'unité ou du programme |
5252| GlobalSymTable | Contient les symboles de l'interface de l'unité |
5353| ObjectSymTable | Contient tous les symboles dans un objet/une classe/une interface/une classe objc et les autres instructions de types d'objet |
5454| RecordSymTable | Contient tous les symboles dans une instruction records |
5555| LocalSymTable | Tient les symboles pour toutes les variables locales d'une routine |
5656| ParaSymTable | Tient les symboles pour tous les paramètres d'une routine (les symboles de déclaration de paramètre effectif) |
5757| Stt_ExceptSymTable | Contient tous les symboles d'exception définis dans un bloc except |
5858| exportedmacrosymtable | Tient toutes les macros exportées |
5959| localmacrosymtable | Tient toutes les macros actuellement dans la portée |
6060| enumsymtable | Contient tous les symboles d'éléments d'une énumération |
6161
6262## Insertion de symboles dans une table de symboles
6363
6464*(Dernière mise à jour pour FPC version 1.0.x)*
6565
6666Pour 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.
6767
6868<http://www.pjh2.de/fpc/CompilerInternalsFigure05.png>
6969
7070## Symbol table interface
7171
7272*(Dernière mise à jour pour FPC version 1.0.x)*
7373
7474### Routines
7575
7676#### Search_a_Symtable
7777
7878| | |
7979|----|----|
80-| Déclaration: | <b>`function`</b>` Search_a_Symtable(`<b>`const`</b>` Symbol: String; SymTableType: TSymTableType): PSym;` |
80+| Déclaration: | `function`` Search_a_Symtable(``const`` Symbol: String; SymTableType: TSymTableType): PSym;` |
8181| 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. |
8282
8383#### GetSym
8484
8585| | |
8686|----|----|
87-| Déclaration: | <b>`procedure`</b>` GetSym(`<b>`const`</b>` S: StringId; NotFoundError: Boolean);` |
87+| Déclaration: | `procedure`` GetSym(``const`` S: StringId; NotFoundError: Boolean);` |
8888| 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é. |
8989
9090#### GlobalDef
9191
9292| | |
9393|----|----|
94-| Déclaration: | <b>`function`</b>` GlobalDef(`<b>`const`</b>` S: String): PDef;` |
94+| Déclaration: | `function`` GlobalDef(``const`` S: String): PDef;` |
9595| 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é. |
9696
9797### Variables
9898
9999#### SrSym
100100
101101| | |
102102|----|----|
103-| Déclaration: | <b>`var`</b>` SrSym: PSym;` |
103+| Déclaration: | `var`` SrSym: PSym;` |
104104| Description: | Celle-ci pointe vers une entrée de symbole trouvée, après l'appel à getsym. |
105105
106106#### SrSymTable
107107
108108| | |
109109|----|----|
110-| Déclaration: | <b>`var`</b>` SrSymTable: PSymTable;` |
110+| Déclaration: | `var`` SrSymTable: PSymTable;` |
111111| Description: | Celle-ci pointe vers la table de symboles SrSym après l'appel à GetSym. |
112112
113113Prochain chapitre: [[Symbol entries/fr|Entrée de table de symboles]]
114114
115115---
116116*From the Free Pascal wiki, page "Symbol tables/fr", as it stood on 2020-12-25 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history