squalylLe 07/10/2009 à 16:25
oui mais ça il connait.
ce qu'il te faut c'est écrire un parseur de grammaire.
en gros
expression => ( expression )
expression => facteur + facteur
facteur => operande * operande
tu vois qu'il y a deux possibilités pour parser une expression
soit
-manger (
-parser expression
-manger )
soit
-manger facteur
-manger +
-manger facteur
il faut savoir qui on appelle, avec un switch()
manger_expression:
lire prochain token
si prochain token = "("
manger_expression recursivement
sinon si prochain token = nombre
manger_facteur
manger_plus
manger_facteur
generer estack
sinon
erreur de syntaxe
manger_plus:
lire prochain token
si pas +: erreur
manger facteur:
lire prochain token
si pas nombre => erreur syntaxe
s'en souvenir
lire prochain token
si * => ce sera une multiplication
sinon => erreur syntaxe
lire prochain token
si pas nombre => erreur
construire estack
etc
pour une version complète, il te faut te documenter sur les grammaires LL(1). Les grammaires LALR sont trop compliquées pour juste une expression.