69Fermer71
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.