Multi Purpose P.K. Syntax Analyzer Generator...

Syntaxe de la Grammaire

(succincte pour l'instant... sera plus détaillée dans une version future...)

Elle commence par .SYNTAX et elle se termine par .END
Les instructions se terminent par ;

.SYNTAX admet plusieurs paramètres :
  • Le premier, obligatoire est le nom de la règle principale.
  • Les suivants sont les déclarations.
Un exemple de grammaire :

.SYNTAX essai
essai ::= .NUMBER;
.END

Les éléments Terminaux de la grammaire sont :



Pour la partie déclaration :
.NOSKIPLINELa fin de ligne est significative (ex BASIC).
.SKIPLINELa fin de ligne est non significative (ex C) (par defaut).
.NOSKIPSPACEL’espace est significatif.
.SKIPSPACEL’espace est non significatif (par defaut).


Pour les tests :
.IDIdentificateur.
.LINETest Fin De Ligne.
.REELRéel.
.NUMBERNumérique.
.STRINGChaîne.
.EOFTest Fin De Fichier.
.EMPTYRien.


Pour les opérateurs du langage :
$0 ou n fois.
< >Génération retardée.
( )parenthèses.
*Dernier lexème Reconnu.
{ }Génération en ligne de code C.
|OU.
=ChaîneTest Chaîne.
-ChaîneTest Non Chaîne.
!testInversion de l’état Succès.


Pour les actions :
.OUT (Chaîne | * | Numérique | ‘,’ | #Numérique | ‘:’) Génération.
.LABEL (Chaîne | Numérique)Définition d’étiquettes.

  • ici Numérique est un entier par exemple 1 qui identifie une étiquette dans une règle.
  • #Numérique référence un bloc de génération retardée.
  • , génère une fin de ligne (ainsi que la parenthèse fermante).
  • : permet de ne pas générer la fin de ligne (sur parenthèse fermante).
.SCAN [Rien | UNTIL Chaîne | NUMBER [Numérique | * | #Numérique] ] sauter des caractères....

  • Rien : Jusqu’a la fin de la ligne.
  • Chaîne : Jusqu’au premier caractère de Chaîne rencontré.
  • Numérique : Nombre de caractères à sauter.
  • * : Nombre de caractères à sauter contenu dans le dernier lexème.
  • #Numérique : Nombre de caractères à sauter contenu dans le bloc de génération retardée.
.RETURNPeut être utilisé dans les "boucles" $.
.BREAKPeut être utilisé dans les "boucles" $.
.CONTINUEPeut être utilisé dans les "boucles" $.
.ERR ChaîneMessage d’Erreur.
.INCLUDE NomdeFichierInclusion de source.


Exemple de génération retardée :
  • Modulo ::= <expression> ‘%’ <expression> .OUT ( #1 "- (" #1 "/" #2 ") *" #2 ) ;
Dans le cas ou on ne saurait faire que des divisions entières et des multiplications entières.



Ce Site a été mis à jour le Jeudi 25 Juin 2020 à 04:52:50