Le syntaxeur
Ce module n'est sans doute pas le plus complexe, mais il est d'une grande importance. Il s'agit d'un "parser" qui a pour but de transformer un fichier source pascal formaté à la convenance de son concepteur, en un fichier "reformaté" de sorte que le compilateur puisse y lire directement le contenu sans se soucier de la forme.
Fonctionnement
La première tâche qui est demandé au Syntaxeur
est d'éliminer
les séparateurs (espaces, caractères de tabulation, retours charriots)
mais aussi les commentaires délimités par { et }.
Ensuite, le Syntaxeur
doit identifier les blocs syntaxiques aussi appelés
lexèmes et les classer dans la catégorie qui leur correspond,
de sorte par exemple que le compilateur puisse savoir sans faire aucun traitement
s'il a à faire avec une entier, une chaîne de caractère
ou un mot clé réservé.
Pour ce faire, il commence par mettre en majuscule les termes à classer
(car la convention de HP PASCAL est insensitive). Cela permet d'éviter
toutes les ambiguités. Ensuite il utilise la table ci-dessous pour effectuer
son traitement. C'est à dire qu'il place dans le fichier de sortie la
liste des lexèmes précédés du tag
de
nommage leur correspondant.
Conventions de nommage des lexèmes
| Nom | Identification | Tag + lexème |
|---|---|---|
| Nombre entier | ±ddddd | NE:±ddddd |
| Nombre flottant | ±ddd.dddE±ddd | NF:±ddd.dddE±ddd |
| Chaîne de catactères | 'aaaaaa' | CC:aaaaaa |
| Caractère simple | 'a' | CS:a |
| Mot clé | voir plus bas | MC:xxx |
| Identificateur | Aaaaaa | ID:Aaaaaa |
| Instruction assembleur |
|
|
où
d
représente un "digit" (0..9)A
représent une lettrea
représente un caractère alphanumérique
Voici la liste des mots clés reconnus:
FALSE TRUE NOT AND OR IN
RESULT IF THEN ELSE CASE WHILE DO TO DOWNTO UNTIL
CHR ORD ROUND DIV MOD COPY LENGTH
REALTOSTR STRTOREAL INTTOSTR STRTOINT
STATIC CONST VAR
EXIT BREAK CONTINUE HALT
BYTE STRING INTEGER BOOLEAN REAL ARRAY OF
PROCEDURE FUNCTION PROGRAM UNIT RESSOURCE USES
ainsi que les symboles suivants:
( , )
[ ]
= < >
<= >= <>
=< =>
..
:=
* + - /
Traitement des erreurs
Les erreurs purement lexicales (lexème non identifié) sont signalées
"au vol". Pour ce qui est de la gestion des erreurs syntaxiques, seul
le compilateur peut les déceler. C'est pourquoi l'objet CSyntaxe, en plus
de générer un fichier de sortie, donne accès à une
structure "liste de lexème".
Cette structure présente bien sûr la liste des lexèmes, mais avec en plus l'abscisse et l'ordonnée de chacun d'eux dans le fichier source. Cela permet donc au Compilateur de signaler exactement où il a trouvé une éventuelle erreur de syntaxe.