Définition dirigée par la syntaxe : mélange d'huile et d'essence
bonjour,
ma femme possède une mobylette ancienne qui n'a pas de graissage séparé. On doit mettre dans le réservoir du mélange huile et essence
"1 litre de mélange à 4%" signifie qu'il y a dans ce mélange 0,96 litre d'essence et 0,04 litre d'huile.
je pourrais écrire un petit programme qui demande la quantité de mélange et le pourcentage, et calcule les quantités d'huile et d'essence. Mais je voudrais faire un peu plus compliqué (pour le fun).
mon programme reçois une phrase du genre "M4P3", qui signifie "4 l de mélange à 3%", et calcule les quantités d'huile et d'essence. il analyse M4P3 à l'aide d'un analyseur syntaxique
j'ai déjà fait l'analyse lexicale et l'analyse syntaxique, qui fonctionnent
sachant que j'utilise la formule huile=mélange x (1-pourcentage/100) et essence = mélange - huile
voici la dds, qui se veut L-attribuée car elle utilise un attribut hérité huile.h calculé avec un attribut à sa gauche (la dds qui construit l'arbre est indiqué plus loin):
Code:
1 2 3 4 5 6
|
essence -> mélange huile | essence.s := mélange.s - huile.s
| huile.h := mélange.s
huile -> pourcentage | huile.s := huile.h x ( 1 - pourcentage.s / 100 )
melange -> M NB | melange.s := nb.val
pourcentage -> P NB | pourcentage.s := nb.val |
les terminaux de cette grammaire sont {M;P;NB}. Les autres symboles sont les non-terminaux
ma question est: la dds ci-dessous est-elle correcte?(E=essence,m=mélange,H=huile,p=pourcentage,H.s:attribut synthétisé H, H.h=attribut hérité H)
Code:
1 2 3 4 5 6
|
E -> m H | E.nud := Nud( '-', m.nud , H.s )
| H.h := m.nud
H -> p | H.s := Nud( 'x', H.h, Nud( '-' , Feuille(NB,1) , Nud( '/' , p.nud , Feuille(NB,100) ) ) )
m -> M NB | m.nud := Feuille(NB,NB.val)
p -> P NB | p.nud := Feuille( NB, NB.val) |
quelqu'un a une idée?