Conversion d’expressions arithmétiques (infixe → suffixe)
Cette machine prend en entrée une expression arithmétique (bien formée) 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 * ) )
.
Elle convertit son entrée pour la mettre en notation polonaise inverse, c’est à dire en écrivant une opération a + b comme a b +. Plus précisément, on utilise le symbole 0 comme séparateur entre les deux arguments, et on suffixe le tout de l’opération. Par exemple, l’expression (2+3)× 4, codée par ((11+111)*1111)
, donnera 110111+01111*
.