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.
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 :
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.
pascal
type
PModule =^TModule;
TModule =object(TLinkedList_Item)
PPUFile: PPPUFile;// Pointer to PPU file object (unit file)
Crc: Longint;// CRC-32 bit of the whole PPU file
Interface_CRC: Longint;// CRC-32 bit of the interface part of// the PPU file
Flags: Longint;// Unit file flags
Compiled: Boolean;// TRUE if module is already compiled
Do_Reload: Boolean;// TRUE if the PPU file must be reloaded
Do_Assemble: Boolean;// Only assemble, don’t recompile unit
Sources_Avail: Boolean;// TRUE if all sources of module are available
Sources_Checked: Boolean;// TRUE if the sources has already been checked
Is_Unit: Boolean;// TRUE if this is a unit (otherwise a library // or a main program)
In_Compile: Boolean;// module is currently being recompiled
In_Second_Compile: Boolean;// module is being compiled for second time
In_Second_Load: Boolean;// module is being reloaded a second time
In_Implementation: Boolean;// currently compiling implementation part // (units only)
In_Global: Boolean;// currently compiling implementation part// (units only)
Recompile_Reason: TRecompile_Reason;// Reason why module should be recompiled
Islibrary: Boolean;// TRUE if this module is a shared library
Map: PUnitMap;// Map of all used units for this unit
Unitcount: Word;// Internal identifier of unit (for GDB support)
Unit_index: Word;
Globalsymtable: Pointer;// Symbol table for this module of externally// visible symbols
Localsymtable: Pointer;// Symbol table for this module of locally// visible symbols
Scanner: Pointer;// Scanner object pointer
Loaded_From: PModule;// Module which referred to this module
Uses_Imports: Boolean;// TRUE if this module imports symbols// from a shared library
Imports: PLinkedList;// Linked list of imported symbols
_Exports: PLinkedList;// Linked list of exported symbols (libraries only)
SourceFiles: PFileManager;// List of all source files for this module
ResourceFiles: TStringContainer;// List of all resource files for this module
Used_Units: TLinkedList;// Information on units used by this module // (pused_unit)
Dependent_Units: TLinkedList;
LocalUnitSearchPath,// Search path for obtaining module source code
LocalObjectSearchPath,
LocalIncludeSearchPath,// Search path for includes for this module
LocalLibrarySearchPath: TSearchPathList;
Path: PString;// Path were module is located or created
OutputPath: PString;// Path where object files (unit), // executable (program) or // shared library (library) is created
ModuleName: PString;// Name of the module in uppercase
ObjFileName: PString;// Full name of object file or executable file
AsmFileName: PString;// Full name of the assembler file
PPUFileName: PString;// Full name of the PPU file
StaticLibFilename: PString;// Full name of the static library name// (used when smart linking is used)
SharedLibFilename: PString;// Filename of the output shared library// (in the case of a library)
ExeFileName: PString;// Filename of the output executable// (in the case of a program)
AsmPrefix: PString;// Filename prefix of output assembler// files when using smartlinking
MainSource: PString;// Name of the main source fileend;
Types d'analyse
(Dernière mise à jour pour FPC version 1.0.x)
Entrée
Analyse de programme ou de bibliothèque
Analyse d'unité
Analyse de routine
Déclarations d'étiquette
Déclarations de constante
Déclarations de type
Déclarations de variable
Déclarations de variable thread
Déclarations de ressource de chaîne
Déclarations d'exports
Analyse d'expression
Déclarations de constante typée
Interface de l'analyseur
(Dernière mise à jour pour FPC version 1.0.x)
variables
AktProcSym
Déclaration:
var`` AktProcSym: PProcSym;
Description:
Pointeur vers l'information de symbole pour la routine en cours d'analyse.
LexLevel
<tbody>
0 = pour le programme principal<br />
1 = pour une sous-routine<br />
2 = pour des sous-routines locales/imbriquées</td>
</tbody>
Current_Module
Déclaration:
var`` Current_Module: PModule;
Description:
Information sur le module courant (programme, bibliothèque ou unité) en cours de compilation.
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:
VoidDef
Déclaration:
var`` VoidDef: POrdDef;
Description:
Pointeur vers le type rien
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cCharDef
Déclaration:
var`` cCharDef: POrdDef;
Description:
Définition de type pour un caractère (char)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cWideCharDef
Déclaration:
var`` cWideCharDef: POrdDef;
Description:
Définition de type pour un caractère unicode (WideChar)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
BoolDef
Déclaration:
var`` BoolDef: POrdDef;
Description:
Définition de type pour une valeur booléenne (boolean)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
u8BitDef
Déclaration:
var`` u8BitDef: POrdDef;
Description:
Deéfinition de type pour une value 8-bit non signée (byte)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
u16BitDef
Déclaration:
var`` u16BitDef: POrdDef;
Description:
Définition de type pour une valeur 16-bit non signée (word)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
u32BitDef
Déclaration:
var`` u32BitDef: POrdDef;
Description:
Définition de type pour une valeur 32-bit non signée (cardinal)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
s32BitDef
Déclaration:
var`` s32BitDef: POrdDef;
Description:
Définition de type pour une valeur 32-bit signée (Longint)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cu64BitDef
Déclaration:
var`` cu64BitDef: POrdDef;
Description:
Définition de type pour une valeur 64-bit non signée (QWord)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cs64BitDef
Déclaration:
var`` cs64BitDef: POrdDef;
Description:
Définition de type pour une valeur 64-bit signée (Int64)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
s64FloatDef
Déclaration:
var`` s64FloatDef: PFloatDef;
Description:
Définition de type pour une valeur en virgule flottante 64-bit IEEE (double)
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.
s32FloatDef
Déclaration:
var`` s32FloatDef: PFloatDef;
Description:
Définition de type pour une valeur en virgule flottante 32-bit IEEE (single)
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.
s80FloatDef
Déclaration:
var`` s80FloatDef : PFloatDef;
Description:
Définition de type pour une valeur en virgule flottante étendue (extended)
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.
s32FixedDef
Déclaration:
var`` s32FixedDef: PFloatDef;
Description:
Définition de type pour une valeur en virgule fixe 32-bit (fixed)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur. Ceci n'est pas supporté officiellement dans FPC 1.0
cShortStringDef
Déclaration:
var`` cShortStringDef: PStringDef;
Description:
Définition de type pour une valeur chaîne courte (ShortString)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cLongStringDef
Déclaration:
var`` cLongStringDef: PStringDef;
Description:
Définition de type pour une valeur chaîne longue (LongString)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur
cAnsiStringDef
Déclaration:
var`` cAnsiStringDef: PStringDef;
Description:
Définition de type pour une valeur chaîne longue ANSI (AnsiString)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
cWideStringDef
Déclaration:
var`` cWideStringDef: PStringDef;
Description:
Définition de type pour une valeur chaîne longue large (2 octets/car., WideString)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
OpenShortStringDef
Déclaration:
var`` OpenShortStringDef: PStringDef;
Description:
Définition de type pour une valeur chaîne ouverte (OpenString)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
OpenCharArrayDef
Déclaration:
var`` OpenCharArrayDef: PArrayDef;
Description:
Définition de type pour une valeur tableau de caractères ouvert (OpenCharArray)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
VoidPointerDef
Déclaration:
var`` VoidPointerDef: PPointerDef;
Description:
Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (Pointer)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
CharPointerDef
Déclaration:
var`` CharPointerDef: PPointerDef;
Description:
Définition de type pour une valeur pointeur vers des caractères (PChar)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
VoidFarPointerDef
Déclaration:
var`` VoidFarPointerDef: PPointerDef;
Description:
Définition de type pour une valeur pointeur qui peut désigner n'importe quoi (intra-segment) (far Pointer)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
cFormalDef
Déclaration:
var`` cFormalDef: PFormalDef;
Description:
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
cfFileDef
Déclaration:
var`` cfFileDef: PFileDef;
Description:
Ceci est le type de fichier par défaut (file)
Notes:
Ceci est chargé comme un type supporté par défaut pour le compilateur.
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.