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.