私はこれをたくさん持っています:
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
これは、入力がコメントで終わっている場合は機能しますが、それ以外で終わっている場合は失敗します。その場合、エラーメッセージは次のようになります
No match (line 13, column 1):
unexpected end of input
expecting "--" or "/*"
そのため、パーサーは、eof
到着するまでにコメントを探しています。考えられるすべてのケースですべてのコメントを使い果たすために必要な適切なコンビネータを見つける手助けが必要です。