Préalable à l'écriture d'un analyseur syntaxique, il est nécessaire de décrire la grammaire sous une forme symbolique similaire à celle dans laquelle est définie la syntaxe du langage Pascal à la fin du poly. Celle des expressions arithmétiques est la suivante:
expression ::= somme '.' somme ::= produit {'+' produit} produit ::= atome {'*' atome} atome ::= nombre | variable | '(' somme ')' nombre ::= '0' | ... '9' variable ::= 'a' | ... 'z'La grammaire se lit de la façon suivante: une expression est une somme suivie du caractère point; une somme est un produit suivi d'une répétition arbitraire du symbole + et d'un produit. Un produit est un atome suivit d'une répétition arbitraire du caractère * et d'un atome. Écrire un analyseur pour cette grammaire c'est d'abord écrire un programme qui reconnaît si une suite de caractères définit une expression bien formée. Pour simplifier, nous supposons que les mots sont des caractères, c'est-à-dire on se contente de:
typedef char lexeme;
typedef lexeme valeur_tampon; typedef int etat_tampon; /* 0 pour vide, 1 pou plein */écrire deux fonctions
lexeme consulte (void); lexeme accepte (void);La première consulte le lexème suivant sans s'engager à le prendre (i.e. elle remplit le tampon si nécessaire (en lisant un caractère au clavier), puis retourne le contenu du le tampon.
La seconde vide le tampon et retourne sa valeur.
En particulier, plusieurs appels à consulte qui ne sont pas séparés par un appel à accepte retourneront le même lexème.
expression ::= somme '.' | '?' somme '.'la nouvelle forme évaluant l'expression après l'avoir construite.
somme ::= produit {plus_ou_moins produit} plus_ou_moins ::= '+' | '-'modifier l'analyseur pour reconnaître la soustraction. (Attention dans la construction de l'arbre de syntaxe abstraite à lire 1-2-3 comme (1-2)-3.):
expression ::= '!' var ':' '=' somme '.' | ...La nouvelle forme lie l'expression reconnu à la variable indiquée.