Je cherche à parser du GCode à l'aide de Attoparsec (en Haskell).
Voilà ce que je voudrais :
> parse "G01 X1 Y2 Z3"
Right [Just 1, Just 2, Just 3]
> parse "G01 X1 Z3"
Right [Just 1, Nothing, Just 3]
> parse "G01"
Left "Message d'erreur..."
Les 2 premiers exemples fonctionnent. C'est le dernier qui me bloque.Je voudrais faire échouer le parser si toutes les valeurs sont "Nothing". Il serait possible de faire sa propre fonction :
condition :: (a -> Bool) -> Parser a -> Parser a
condition f p = do
r <- p
case f r of
True -> return r
False -> fonction_qui_fait_echouer
seulement voilà j'ai cherché dans la doc, et je ne trouve pas de "fonction qui fait échouer". Quelqu'un aurait une idée ?
# Pas vu de parseur qui échoue non plus…
Posté par anaseto . Évalué à 3. Dernière modification le 07 octobre 2015 à 20:54.
Je n'ai pas vu non plus de parseur qui échoue toujours dans attoparsec (dans parsec il y en a bien un). Ceci dit, si tu connais le type d'entrées qu'il peut y avoir, ça doit pas être trop dur d'en faire un quelconque qui ne matchera jamais en pratique dans ce cas du genre
(string "linuxfr")
(pas très propre, c'est sûr).Ceci dit, à moins que tu aies besoin de grosses performances, parsec est probablement une meilleure idée (plus de fonctions, et de meilleurs messages d'erreur il me semble).
Edit : pas sûr que ça marche mon truc, d'ailleurs, car attoparsec backtraque.
[^] # Re: Pas vu de parseur qui échoue non plus…
Posté par max22 . Évalué à 1.
merci, je viens de le recoder avec parsec, ce qui n'a pas été très difficile vu que les 2 se ressemblent. Effectivement il y a bien une fonction qui fait échouer.
J'avais mis Parsec de côté au début en pensant que c'était une usine à gaz, j'ai eu tort.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.