J'essaie la bibliothèque parsec et je ne sais pas comment gérer cette tâche de base.Vérification si l'entrée restante est un espace avec le parsec
Supposons que je donne les résultats suivants:
data Foo = A | AB
et je veux la chaîne "a" à analyser comme A
et "a b" AB
. Si je viens de le faire:
parseA :: parser Foo
parseA = do
reserved "a"
return A
parseAB :: parser Foo
parseAB = do
reserved "a"
reserved "b"
return AB
parseFoo :: parser Foo
parseFoo = parseA
<|> parseAB
puis parseFoo
analysera « un b » comme A
depuis parseA
ne se soucie pas qu'il n'y a pas encore des espaces à gauche après la consommation du « a ». Comment cela peut-il être réparé?
Désolé, je aurais dû préciser que mon 'parseAB' fonctionne très bien, il est' parseFoo' que je vais avoir des problèmes avec. – user181407
ah, j'ai compris. votre grammaire a besoin de revenir en arrière –
vous devez modifier la grammaire en AB | A et utiliser 'try' à partir de parsec –