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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
E -> m  H   | E.nœud := Nœud( '-', m.nœud , H.s )
            | H.h := m.nœud
H -> p      | H.s := Nœud( 'x', H.h, Nœud( '-' , Feuille(NB,1) , Nœud( '/' , p.nœud , Feuille(NB,100) ) ) )
m -> M NB   | m.nœud := Feuille(NB,NB.val)
p -> P NB   | p.nœud := Feuille( NB, NB.val)
quelqu'un a une idée?