Sign in Join
Wiki copytemporary

The parser/fr: what changed

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

Title: The parser/fr

OldNewLine
1+Retour au contenu [[FPC internals/fr|FPC internals]]
2+
3+# L'analyseur syntaxique
4+
5+*(Dernière mise à jour pour FPC version 1.0.x)*
6+
7+La 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.
8+
9+Une 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 :
10+
11+<http://www.pjh2.de/fpc/CompilerInternalsFigure08.png>
12+
13+## Information de module
14+
15+*(Dernière mise à jour pour FPC version 1.0.x)*
16+
17+Chaque 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.
18+
19+``` pascal
20+type
21+ PModule = ^TModule;
22+ TModule = object(TLinkedList_Item)
23+ PPUFile: PPPUFile; // Pointer to PPU file object (unit file)
24+ Crc: Longint; // CRC-32 bit of the whole PPU file
25+ Interface_CRC: Longint; // CRC-32 bit of the interface part of
26+ // the PPU file
27+ Flags: Longint; // Unit file flags
28+ Compiled: Boolean; // TRUE if module is already compiled
29+ Do_Reload: Boolean; // TRUE if the PPU file must be reloaded
30+ Do_Assemble: Boolean; // Only assemble, don’t recompile unit
31+ Sources_Avail: Boolean; // TRUE if all sources of module are available
32+ Sources_Checked: Boolean; // TRUE if the sources has already been checked
33+ Is_Unit: Boolean; // TRUE if this is a unit (otherwise a library
34+ // or a main program)
35+ In_Compile: Boolean; // module is currently being recompiled
36+ In_Second_Compile: Boolean; // module is being compiled for second time
37+ In_Second_Load: Boolean; // module is being reloaded a second time
38+ In_Implementation: Boolean; // currently compiling implementation part
39+ // (units only)
40+ In_Global: Boolean; // currently compiling implementation part
41+ // (units only)
42+ Recompile_Reason: TRecompile_Reason; // Reason why module should be recompiled
43+ Islibrary: Boolean; // TRUE if this module is a shared library
44+ Map: PUnitMap; // Map of all used units for this unit
45+ Unitcount: Word; // Internal identifier of unit (for GDB support)
46+ Unit_index: Word;
47+ Globalsymtable: Pointer; // Symbol table for this module of externally
48+ // visible symbols
49+ Localsymtable: Pointer; // Symbol table for this module of locally
50+ // visible symbols
51+ Scanner: Pointer; // Scanner object pointer
52+ Loaded_From: PModule; // Module which referred to this module
53+ Uses_Imports: Boolean; // TRUE if this module imports symbols
54+ // from a shared library
55+ Imports: PLinkedList; // Linked list of imported symbols
56+ _Exports: PLinkedList; // Linked list of exported symbols (libraries only)
57+ SourceFiles: PFileManager; // List of all source files for this module
58+ ResourceFiles: TStringContainer; // List of all resource files for this module
59+ Used_Units: TLinkedList; // Information on units used by this module
60+ // (pused_unit)
61+ Dependent_Units: TLinkedList;
62+ LocalUnitSearchPath, // Search path for obtaining module source code
63+ LocalObjectSearchPath,
64+ LocalIncludeSearchPath, // Search path for includes for this module
65+ LocalLibrarySearchPath: TSearchPathList;
66+ Path: PString; // Path were module is located or created
67+ OutputPath: PString; // Path where object files (unit),
68+ // executable (program) or
69+ // shared library (library) is created
70+ ModuleName: PString; // Name of the module in uppercase
71+ ObjFileName: PString; // Full name of object file or executable file
72+ AsmFileName: PString; // Full name of the assembler file
73+ PPUFileName: PString; // Full name of the PPU file
74+ StaticLibFilename: PString; // Full name of the static library name
75+ // (used when smart linking is used)
76+ SharedLibFilename: PString; // Filename of the output shared library
77+ // (in the case of a library)
78+ ExeFileName: PString; // Filename of the output executable
79+ // (in the case of a program)
80+ AsmPrefix: PString; // Filename prefix of output assembler
81+ // files when using smartlinking
82+ MainSource: PString; // Name of the main source file
83+ end;
84+```
85+
86+## Types d'analyse
87+
88+*(Dernière mise à jour pour FPC version 1.0.x)*
89+
90+### Entrée
91+
92+### Analyse de programme ou de bibliothèque
93+
94+### Analyse d'unité
95+
96+### Analyse de routine
97+
98+### Déclarations d'étiquette
99+
100+### Déclarations de constante
101+
102+### Déclarations de type
103+
104+### Déclarations de variable
105+
106+### Déclarations de variable thread
107+
108+### Déclarations de ressource de chaîne
109+
110+### Déclarations d'exports
111+
112+### Analyse d'expression
113+
114+### Déclarations de constante typée
115+
116+## Interface de l'analyseur
117+
118+*(Dernière mise à jour pour FPC version 1.0.x)*
119+
120+### variables
121+
122+#### AktProcSym
123+
124+| | |
125+|----|----|
126+| Déclaration: | `var`` AktProcSym: PProcSym;` |
127+| Description: | Pointeur vers l'information de symbole pour la routine en cours d'analyse. |
128+
129+#### LexLevel
130+
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>
138+
139+#### Current_Module
140+
141+| | |
142+|----|----|
143+| Déclaration: | `var`` Current_Module: PModule;` |
144+| Description: | Information sur le module courant (programme, bibliothèque ou unité) en cours de compilation. |
145+
146+Les 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:
147+
148+#### VoidDef
149+
150+| | |
151+|----|----|
152+| Déclaration: | `var`` VoidDef: POrdDef;` |
153+| Description: | Pointeur vers le type rien |
154+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
155+
156+#### cCharDef
157+
158+| | |
159+|----|----|
160+| Déclaration: | `var`` cCharDef: POrdDef;` |
161+| Description: | Définition de type pour un caractère (*char*) |
162+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
163+
164+#### cWideCharDef
165+
166+| | |
167+|----|----|
168+| Déclaration: | `var`` cWideCharDef: POrdDef;` |
169+| Description: | Définition de type pour un caractère unicode (*WideChar*) |
170+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
171+
172+#### BoolDef
173+
174+| | |
175+|----|----|
176+| Déclaration: | `var`` BoolDef: POrdDef;` |
177+| Description: | Définition de type pour une valeur booléenne (*boolean*) |
178+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
179+
180+#### u8BitDef
181+
182+| | |
183+|----|----|
184+| Déclaration: | `var`` u8BitDef: POrdDef;` |
185+| Description: | Deéfinition de type pour une value 8-bit non signée (*byte*) |
186+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
187+
188+#### u16BitDef
189+
190+| | |
191+|----|----|
192+| Déclaration: | `var`` u16BitDef: POrdDef;` |
193+| Description: | Définition de type pour une valeur 16-bit non signée (*word*) |
194+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
195+
196+#### u32BitDef
197+
198+| | |
199+|----|----|
200+| Déclaration: | `var`` u32BitDef: POrdDef;` |
201+| Description: | Définition de type pour une valeur 32-bit non signée (*cardinal*) |
202+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
203+
204+#### s32BitDef
205+
206+| | |
207+|----|----|
208+| Déclaration: | `var`` s32BitDef: POrdDef;` |
209+| Description: | Définition de type pour une valeur 32-bit signée (*Longint*) |
210+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
211+
212+#### cu64BitDef
213+
214+| | |
215+|----|----|
216+| Déclaration: | `var`` cu64BitDef: POrdDef;` |
217+| Description: | Définition de type pour une valeur 64-bit non signée (*QWord*) |
218+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
219+
220+#### cs64BitDef
221+
222+| | |
223+|----|----|
224+| Déclaration: | `var`` cs64BitDef: POrdDef;` |
225+| Description: | Définition de type pour une valeur 64-bit signée (*Int64*) |
226+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
227+
228+#### s64FloatDef
229+
230+| | |
231+|----|----|
232+| Déclaration: | `var`` s64FloatDef: PFloatDef;` |
233+| Description: | Définition de type pour une valeur en virgule flottante 64-bit IEEE (*double*) |
234+| 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. |
235+
236+#### s32FloatDef
237+
238+| | |
239+|----|----|
240+| Déclaration: | `var`` s32FloatDef: PFloatDef;` |
241+| Description: | Définition de type pour une valeur en virgule flottante 32-bit IEEE (*single*) |
242+| 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. |
243+
244+#### s80FloatDef
245+
246+| | |
247+|----|----|
248+| Déclaration: | `var`` s80FloatDef : PFloatDef;` |
249+| Description: | Définition de type pour une valeur en virgule flottante étendue (*extended*) |
250+| 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. |
251+
252+#### s32FixedDef
253+
254+| | |
255+|----|----|
256+| Déclaration: | `var`` s32FixedDef: PFloatDef;` |
257+| Description: | Définition de type pour une valeur en virgule fixe 32-bit (*fixed*) |
258+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. Ceci n'est pas supporté officiellement dans FPC 1.0 |
259+
260+#### cShortStringDef
261+
262+| | |
263+|----|----|
264+| Déclaration: | `var`` cShortStringDef: PStringDef;` |
265+| Description: | Définition de type pour une valeur chaîne courte (*ShortString*) |
266+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
267+
268+#### cLongStringDef
269+
270+| | |
271+|----|----|
272+| Déclaration: | `var`` cLongStringDef: PStringDef;` |
273+| Description: | Définition de type pour une valeur chaîne longue (*LongString*) |
274+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur |
275+
276+#### cAnsiStringDef
277+
278+| | |
279+|----|----|
280+| Déclaration: | `var`` cAnsiStringDef: PStringDef;` |
281+| Description: | Définition de type pour une valeur chaîne longue ANSI (*AnsiString*) |
282+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
283+
284+#### cWideStringDef
285+
286+| | |
287+|----|----|
288+| Déclaration: | `var`` cWideStringDef: PStringDef;` |
289+| Description: | Définition de type pour une valeur chaîne longue large (2 octets/car., *WideString*) |
290+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
291+
292+#### OpenShortStringDef
293+
294+| | |
295+|----|----|
296+| Déclaration: | `var`` OpenShortStringDef: PStringDef;` |
297+| Description: | Définition de type pour une valeur chaîne ouverte (*OpenString*) |
298+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
299+
300+#### OpenCharArrayDef
301+
302+| | |
303+|----|----|
304+| Déclaration: | `var`` OpenCharArrayDef: PArrayDef;` |
305+| Description: | Définition de type pour une valeur tableau de caractères ouvert (*OpenCharArray*) |
306+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
307+
308+#### VoidPointerDef
309+
310+| | |
311+|----|----|
312+| Déclaration: | `var`` VoidPointerDef: PPointerDef;` |
313+| Description: | Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (*Pointer*) |
314+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
315+
316+#### CharPointerDef
317+
318+| | |
319+|----|----|
320+| Déclaration: | `var`` CharPointerDef: PPointerDef;` |
321+| Description: | Définition de type pour une valeur pointeur vers des caractères (*PChar*) |
322+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
323+
324+#### VoidFarPointerDef
325+
326+| | |
327+|----|----|
328+| Déclaration: | `var`` VoidFarPointerDef: PPointerDef;` |
329+| Description: | Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (intra-segment) (*far Pointer*) |
330+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
331+
332+#### cFormalDef
333+
334+| | |
335+|----|----|
336+| Déclaration: | `var`` cFormalDef: PFormalDef;` |
337+| Description: |   |
338+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
339+
340+#### cfFileDef
341+
342+| | |
343+|----|----|
344+| Déclaration: | `var`` cfFileDef: PFileDef;` |
345+| Description: | Ceci est le type de fichier par défaut (*file*) |
346+| Notes: | Ceci est chargé comme un type supporté par défaut pour le compilateur. |
347+
348+Prochain chapitre: [[The inline assembler parser/fr|L'analyseur d'assembleur inline]]
349+
350+---
351+*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