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
ASM
...
...
END
ASM:...
ASM:...

  • d représente un "digit" (0..9)
  • A représent une lettre
  • a 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.