J'ai ceci:Comment supprimer les commentaires d'un fichier avec Parsec?
comment :: GenParser Char st()
comment =
(string "--" >> manyTill anyChar newline >> spaces >> return()) <|>
(string "/*" >> manyTill anyChar (string "*/") >> spaces >> return())
eatComments :: GenParser Char st String
eatComments = do
xs <- many (do
optional comment
x <- manyTill anyChar (try comment)
return x)
return $ intercalate " " xs
Cela fonctionne si l'entrée se termine par un commentaire, mais il échoue si elle se termine par autre chose. Dans ce cas, le message d'erreur est comme
No match (line 13, column 1):
unexpected end of input
expecting "--" or "/*"
L'analyseur recherche un commentaire par le temps eof
arrive. J'ai besoin d'aide pour trouver les bons combinateurs dont j'ai besoin pour manger tous les commentaires dans tous les cas possibles.
Si vous ne souhaitez pas conserver les commentaires, utilisez le module Token. Voir les exemples dans la distribution Parsec 2.0 d'origine pour l'utilisation du module Token et de LanguageDef: http://legacy.cs.uu.nl/daan/parsec.html –
Est-ce que cela nécessite un langage def pour la version MySQL de SQL et DDL? – dan
Oui. Effectivement, un LangaugeDef est une spécification lexer pour Parsec. Ils sont beaucoup plus simples à écrire qu'un Alex Alex - bien qu'ils soient moins puissants. –