2017-06-29 2 views
0

La meilleure façon d'analyser tout caractère, sauf quelques-uns, est d'utiliser noneOf Combinator, Malheureusement, il ne fonctionne pas si je le combine de la manière suivante:Comment analyser plusieurs caractères sauf quelques-uns entre parenthèses?

Combine.parse (Combine.parens <| Combine.many <| Combine.Char.noneOf ['"', '\\']) "()" 

Err ((),{ data = "()", input = "", position = 2 },["expected \")\""]) 
: Result.Result 
    (Combine.ParseErr()) (Combine.ParseOk() (List Char)) 

Répondre

1

Votre utilisation de noneOf résultats dans ce parser consommation tous les caractères incluant la parenthèse fermante. Puisque la partie interne consomme le paren de fermeture, l'analyseur Combine.parens ne verra pas le paren de fermeture. Vous devez provoquer l'arrêt de l'analyseur many <| noneOf ... sur une parenthèse fermante.

Pensez à ajouter la parenthèse fermante à la liste des caractères noneOf:

Combine.parse (Combine.parens <| Combine.many <| Combine.Char.noneOf ['"', '\\', ')']) "()"