Bonjour tout le monde, je travaille sur un évaluateur de formule postfixe, voila le code sur lequel je suis parti :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 type unaire == float -> float;; type binaire == float -> float -> float;; type lexem = |nombre of float |opUnaire of unaire * lexem |opBinaire of lexem * binaire * lexem;; type FP = |formule of lexem list;; let empile lex refListe = refListe := lex::(!refListe);; let depile refListe = match !refListe with |[] -> failwith("Pile vide !") |t::q -> begin refListe := q ; t; end;; let additionner a b = a +. b;; let soustraire a b = a -. b;; let multiplier a b = a *. b;; let diviser a b = a /. b;; let rec factoriel n = if n <= 0. then 1. else n *. factoriel(n -. 1.);; let puissance a b = let x = ref a in for i = 2 to b do x := (!x) *. a done; !x;; (*Racine carrée définie sur les réel par sqrt(nombre)*)
Où un lexem pouvant être soit un réel, soit un opérateur unaire (exemple : factoriel, cosinus...) ou opérateur binaire (addition, etc.)...
Et des fonctions d'empilage ou de dépilage que j'ai défini pour pouvoir manipuler chaque élément de la formule logique FP à l'aide d'une pile.
Est-ce correcte jusqu'à maintenant ? On nous a demandé de procéder de cette façon de toute manière...
Ainsi, pour définir une opération dans un lexem on aurait :
Mais ce qui me gène c'est que je ne vois pas trop où est la notation postfixe là dedans en fait... car en écrivant a + b comme je l'ai fait au dessus on voit que c'est a + b et non a;b;+ comme ça devrai être en postfixe... à moins que ça soit un problème d'ordre de définition dans le type lexem... ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (*(a + b)*) let F1 = opBinaire(a, additionner, b);;
Merci d'avance.
Partager