Parser une expression préfixe
Bonjour,
je suis dans l'idée d'implémenter un petit calculateur d'expression préfixe.
J'ai, pour l'instant, fait un type récursif pour représenter mes expressions, ainsi que la fonction pour l'évaluer et donner le résultat (ces deux ne posent pas de problèmes) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| data Expr = Num Int
| Add Expr Expr
| Mul Expr Expr
| Div Expr Expr
eval (Num x) = x
eval (Add (Num a) (Num b)) = a+b
eval (Mul (Num a) (Num b)) = a*b
eval (Div (Num a) (Num b)) = a `div`b
eval (Add a b) = (eval a) + (eval b)
eval (Mul a b) = (eval a) * (eval b)
eval (Div a b) = (eval a) `div` (eval b) |
L'idée est donc de parser un type [Char] (par exemple "+ 9 * 3 1") et de le transformer en type Expr qui pourra être évalué par la fonction 'eval" (pour donner (Add (Num 9) (Mul (Num 3) (Num 1)) ).
J'avais commencé à écrire une telle fonction, mais je suis bloqué, de plus je pense ne pas utiliser la bonne voie :
Code:
1 2 3 4
| parse :: [Char] -> Expr
parse (x:xs:ys)
| x == '+' = (Add) (parse xs) (parse ys)
| x == '*' = (Mul) (parse xs) (parse ys) |
Donc voilà, j'aimerais avoir vos conseils, j'aurais aimé faire la parsing moi-même, mais pensez-vous qu'utiliser un module comme Text.Parsec pourrait être mieux ?
Merci d'avance !