Sign in Join
Wiki copytemporary

The parser/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# L'analyseur syntaxique
44
55*(Dernière mise à jour pour FPC version 1.0.x)*
66
77La tâche de l'analyseur syntaxique est de lire le jeton produit par l'analyseur lexicale et de s'assurer du respect de la syntaxe du Pascal. Il remplit aussi la table des symboles et créée les noeuds intermédiaires (l'arbre) qui sera utilisé par le générateur de code.
88
99Une vue d'ensemble du processus d'analyse, aussi bien que la relation entre l'arbre, le contrôle de type et le générateur de code est montré dans le diagramme suivant :
1010
1111<http://www.pjh2.de/fpc/CompilerInternalsFigure08.png>
1212
1313## Information de module
1414
1515*(Dernière mise à jour pour FPC version 1.0.x)*
1616
1717Chaque module étant compilé, qu'il soit une bibliothèque, une unité ou un programme principal a de l'information qui est requise. Ceci est stocké en mémoire dans l'objet TModule. Pour éviter la recompilation des modules déjà compilés, les dépendances des modules sont stockées dans le fichier PPU, ce qui rend aisée la détermination des modules à recompiler.
1818
1919``` pascal
2020type
2121 PModule = ^TModule;
2222 TModule = object(TLinkedList_Item)
2323 PPUFile: PPPUFile; // Pointer to PPU file object (unit file)
2424 Crc: Longint; // CRC-32 bit of the whole PPU file
2525 Interface_CRC: Longint; // CRC-32 bit of the interface part of
2626 // the PPU file
2727 Flags: Longint; // Unit file flags
2828 Compiled: Boolean; // TRUE if module is already compiled
2929 Do_Reload: Boolean; // TRUE if the PPU file must be reloaded
3030 Do_Assemble: Boolean; // Only assemble, don’t recompile unit
3131 Sources_Avail: Boolean; // TRUE if all sources of module are available
3232 Sources_Checked: Boolean; // TRUE if the sources has already been checked
3333 Is_Unit: Boolean; // TRUE if this is a unit (otherwise a library
3434 // or a main program)
3535 In_Compile: Boolean; // module is currently being recompiled
3636 In_Second_Compile: Boolean; // module is being compiled for second time
3737 In_Second_Load: Boolean; // module is being reloaded a second time
3838 In_Implementation: Boolean; // currently compiling implementation part
3939 // (units only)
4040 In_Global: Boolean; // currently compiling implementation part
4141 // (units only)
4242 Recompile_Reason: TRecompile_Reason; // Reason why module should be recompiled
4343 Islibrary: Boolean; // TRUE if this module is a shared library
4444 Map: PUnitMap; // Map of all used units for this unit
4545 Unitcount: Word; // Internal identifier of unit (for GDB support)
4646 Unit_index: Word;
4747 Globalsymtable: Pointer; // Symbol table for this module of externally
4848 // visible symbols
4949 Localsymtable: Pointer; // Symbol table for this module of locally
5050 // visible symbols
5151 Scanner: Pointer; // Scanner object pointer
5252 Loaded_From: PModule; // Module which referred to this module
5353 Uses_Imports: Boolean; // TRUE if this module imports symbols
5454 // from a shared library
5555 Imports: PLinkedList; // Linked list of imported symbols
5656 _Exports: PLinkedList; // Linked list of exported symbols (libraries only)
5757 SourceFiles: PFileManager; // List of all source files for this module
5858 ResourceFiles: TStringContainer; // List of all resource files for this module
5959 Used_Units: TLinkedList; // Information on units used by this module
6060 // (pused_unit)
6161 Dependent_Units: TLinkedList;
6262 LocalUnitSearchPath, // Search path for obtaining module source code
6363 LocalObjectSearchPath,
6464 LocalIncludeSearchPath, // Search path for includes for this module
6565 LocalLibrarySearchPath: TSearchPathList;
6666 Path: PString; // Path were module is located or created
6767 OutputPath: PString; // Path where object files (unit),
6868 // executable (program) or
6969 // shared library (library) is created
7070 ModuleName: PString; // Name of the module in uppercase
7171 ObjFileName: PString; // Full name of object file or executable file
7272 AsmFileName: PString; // Full name of the assembler file
7373 PPUFileName: PString; // Full name of the PPU file
7474 StaticLibFilename: PString; // Full name of the static library name
7575 // (used when smart linking is used)
7676 SharedLibFilename: PString; // Filename of the output shared library
7777 // (in the case of a library)
7878 ExeFileName: PString; // Filename of the output executable
7979 // (in the case of a program)
8080 AsmPrefix: PString; // Filename prefix of output assembler
8181 // files when using smartlinking
8282 MainSource: PString; // Name of the main source file
8383 end;
8484```
8585
8686## Types d'analyse
8787
8888*(Dernière mise à jour pour FPC version 1.0.x)*
8989
9090### Entrée
9191
9292### Analyse de programme ou de bibliothèque
9393
9494### Analyse d'unité
9595
9696### Analyse de routine
9797
9898### Déclarations d'étiquette
9999
100100### Déclarations de constante
101101
102102### Déclarations de type
103103
104104### Déclarations de variable
105105
106106### Déclarations de variable thread
107107
108108### Déclarations de ressource de chaîne
109109
110110### Déclarations d'exports
111111
112112### Analyse d'expression
113113
114114### Déclarations de constante typée
115115
116116## Interface de l'analyseur
117117
118118*(Dernière mise à jour pour FPC version 1.0.x)*
119119
120120### variables
121121
122122#### AktProcSym
123123
124124| | |
125125|----|----|
126126| Déclaration: | `var`` AktProcSym: PProcSym;` |
127127| Description: | Pointeur vers l'information de symbole pour la routine en cours d'analyse. |
128128
129129#### LexLevel
130130
131-<tbody>
132-
133-0 = pour le programme principal<br />
134-1 = pour une sous-routine<br />
135-2 = pour des sous-routines locales/imbriquées</td>
136-
137-</tbody>
131+| Déclaration: | `var`` LexLevel: Longint;` |
132+|---|---|
133+| Description: | Niveau de code en cours d'analyse et compilé · 0 = pour le programme principal · 1 = pour une sous-routine · 2 = pour des sous-routines locales/imbriquées |
138134
139135#### Current_Module
140136
141137| | |
142138|----|----|
143139| Déclaration: | `var`` Current_Module: PModule;` |
144140| Description: | Information sur le module courant (programme, bibliothèque ou unité) en cours de compilation. |
145141
146142Les variables suivantes ont des définitions de type par défaut qui sont créées chaque fois que la compilation commence (définition par défaut de l'unité System), ces définitions doivent toujours être valides:
147143
148144#### VoidDef
149145
150146| | |
151147|----|----|
152148| Déclaration: | `var`` VoidDef: POrdDef;` |
153149| Description: | Pointeur vers le type rien |
154150| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
155151
156152#### cCharDef
157153
158154| | |
159155|----|----|
160156| Déclaration: | `var`` cCharDef: POrdDef;` |
161157| Description: | Définition de type pour un caractère (*char*) |
162158| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
163159
164160#### cWideCharDef
165161
166162| | |
167163|----|----|
168164| Déclaration: | `var`` cWideCharDef: POrdDef;` |
169165| Description: | Définition de type pour un caractère unicode (*WideChar*) |
170166| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
171167
172168#### BoolDef
173169
174170| | |
175171|----|----|
176172| Déclaration: | `var`` BoolDef: POrdDef;` |
177173| Description: | Définition de type pour une valeur booléenne (*boolean*) |
178174| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
179175
180176#### u8BitDef
181177
182178| | |
183179|----|----|
184180| Déclaration: | `var`` u8BitDef: POrdDef;` |
185181| Description: | Deéfinition de type pour une value 8-bit non signée (*byte*) |
186182| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
187183
188184#### u16BitDef
189185
190186| | |
191187|----|----|
192188| Déclaration: | `var`` u16BitDef: POrdDef;` |
193189| Description: | Définition de type pour une valeur 16-bit non signée (*word*) |
194190| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
195191
196192#### u32BitDef
197193
198194| | |
199195|----|----|
200196| Déclaration: | `var`` u32BitDef: POrdDef;` |
201197| Description: | Définition de type pour une valeur 32-bit non signée (*cardinal*) |
202198| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
203199
204200#### s32BitDef
205201
206202| | |
207203|----|----|
208204| Déclaration: | `var`` s32BitDef: POrdDef;` |
209205| Description: | Définition de type pour une valeur 32-bit signée (*Longint*) |
210206| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
211207
212208#### cu64BitDef
213209
214210| | |
215211|----|----|
216212| Déclaration: | `var`` cu64BitDef: POrdDef;` |
217213| Description: | Définition de type pour une valeur 64-bit non signée (*QWord*) |
218214| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
219215
220216#### cs64BitDef
221217
222218| | |
223219|----|----|
224220| Déclaration: | `var`` cs64BitDef: POrdDef;` |
225221| Description: | Définition de type pour une valeur 64-bit signée (*Int64*) |
226222| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
227223
228224#### s64FloatDef
229225
230226| | |
231227|----|----|
232228| Déclaration: | `var`` s64FloatDef: PFloatDef;` |
233229| Description: | Définition de type pour une valeur en virgule flottante 64-bit IEEE (*double*) |
234230| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. Cela pourrait ne pas vraiment pointer vers le type *double* si le processeur ne le prend pas en charge. |
235231
236232#### s32FloatDef
237233
238234| | |
239235|----|----|
240236| Déclaration: | `var`` s32FloatDef: PFloatDef;` |
241237| Description: | Définition de type pour une valeur en virgule flottante 32-bit IEEE (*single*) |
242238| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. Cela pourrait ne pas vraiment pointer vers le type *single* si le processeur ne le prend pas en charge. |
243239
244240#### s80FloatDef
245241
246242| | |
247243|----|----|
248244| Déclaration: | `var`` s80FloatDef : PFloatDef;` |
249245| Description: | Définition de type pour une valeur en virgule flottante étendue (*extended*) |
250246| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. Cela pourrait ne pas vraiment pointer vers le type *extended* si le processeur ne le prend pas en charge. |
251247
252248#### s32FixedDef
253249
254250| | |
255251|----|----|
256252| Déclaration: | `var`` s32FixedDef: PFloatDef;` |
257253| Description: | Définition de type pour une valeur en virgule fixe 32-bit (*fixed*) |
258254| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. Ceci n'est pas supporté officiellement dans FPC 1.0 |
259255
260256#### cShortStringDef
261257
262258| | |
263259|----|----|
264260| Déclaration: | `var`` cShortStringDef: PStringDef;` |
265261| Description: | Définition de type pour une valeur chaîne courte (*ShortString*) |
266262| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
267263
268264#### cLongStringDef
269265
270266| | |
271267|----|----|
272268| Déclaration: | `var`` cLongStringDef: PStringDef;` |
273269| Description: | Définition de type pour une valeur chaîne longue (*LongString*) |
274270| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
275271
276272#### cAnsiStringDef
277273
278274| | |
279275|----|----|
280276| Déclaration: | `var`` cAnsiStringDef: PStringDef;` |
281277| Description: | Définition de type pour une valeur chaîne longue ANSI (*AnsiString*) |
282278| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
283279
284280#### cWideStringDef
285281
286282| | |
287283|----|----|
288284| Déclaration: | `var`` cWideStringDef: PStringDef;` |
289285| Description: | Définition de type pour une valeur chaîne longue large (2 octets/car., *WideString*) |
290286| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
291287
292288#### OpenShortStringDef
293289
294290| | |
295291|----|----|
296292| Déclaration: | `var`` OpenShortStringDef: PStringDef;` |
297293| Description: | Définition de type pour une valeur chaîne ouverte (*OpenString*) |
298294| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
299295
300296#### OpenCharArrayDef
301297
302298| | |
303299|----|----|
304300| Déclaration: | `var`` OpenCharArrayDef: PArrayDef;` |
305301| Description: | Définition de type pour une valeur tableau de caractères ouvert (*OpenCharArray*) |
306302| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
307303
308304#### VoidPointerDef
309305
310306| | |
311307|----|----|
312308| Déclaration: | `var`` VoidPointerDef: PPointerDef;` |
313309| Description: | Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (*Pointer*) |
314310| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
315311
316312#### CharPointerDef
317313
318314| | |
319315|----|----|
320316| Déclaration: | `var`` CharPointerDef: PPointerDef;` |
321317| Description: | Définition de type pour une valeur pointeur vers des caractères (*PChar*) |
322318| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
323319
324320#### VoidFarPointerDef
325321
326322| | |
327323|----|----|
328324| Déclaration: | `var`` VoidFarPointerDef: PPointerDef;` |
329325| Description: | Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (intra-segment) (*far Pointer*) |
330326| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
331327
332328#### cFormalDef
333329
334330| | |
335331|----|----|
336332| Déclaration: | `var`` cFormalDef: PFormalDef;` |
337333| Description: |   |
338334| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
339335
340336#### cfFileDef
341337
342338| | |
343339|----|----|
344340| Déclaration: | `var`` cfFileDef: PFileDef;` |
345341| Description: | Ceci est le type de fichier par défaut (*file*) |
346342| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
347343
348344Prochain chapitre: [[The inline assembler parser/fr|L'analyseur d'assembleur inline]]
349345
350346---
351347*From the Free Pascal wiki, page "The parser/fr", as it stood on 2020-12-31 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