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 :
.NOSKIPLINE | La fin de ligne est significative (ex BASIC). |
.SKIPLINE | La fin de ligne est non significative (ex C) (par defaut). |
.NOSKIPSPACE | Lespace est significatif. |
.SKIPSPACE | Lespace est non significatif (par defaut). |
Pour les tests :
.ID | Identificateur. |
.LINE | Test Fin De Ligne. |
.REEL | Réel. |
.NUMBER | Numérique. |
.STRING | Chaîne. |
.EOF | Test Fin De Fichier. |
.EMPTY | Rien. |
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îne | Test Chaîne. |
-Chaîne | Test Non Chaîne. |
!test | Inversion 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 : Jusqua la fin de la ligne.
- Chaîne : Jusquau 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.
|
.RETURN | Peut être utilisé dans les "boucles" $. |
.BREAK | Peut être utilisé dans les "boucles" $. |
.CONTINUE | Peut être utilisé dans les "boucles" $. |
.ERR Chaîne | Message dErreur. |
.INCLUDE NomdeFichier | Inclusion 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.