Test de correction syntaxique d’expressions arithmétiques
Cette machine vérifie si son entrée est une expression arithmétique avec les nombres en unaire, c’est à dire générée par la grammaire suivante:
e,f ::= nb | (e + f) | (e * f)
Où nb
est la représentation unaire d’un nombre: le nombre n est représentée par une séquence de 1
de longueur n.
Par exemple, l’expression 2 × 3 s’écrit (11 * 111)
. Notez que 0 (zéro) s’écrit comme une chaîne vide, puisqu’il s’agit d’une séquence de 1
de longueur 0. On écrit donc 0 + (2 × 0) comme ceci : ( + ( 11 * ) )
.
Une expression mal formée a généralement un défaut de parenthèsage: soit à cause d’une incohérence entre le nombre de parenthèses et celui d’opérateurs (par exemple (1+11+111)
ou (1)
), soit plus simplement parceque des parenthèses sont ouvertes sans être fermées (1+1
, ou fermées sans avoir été ouvertes 1+1)
.