我有這麼多:我如何從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
這工作如果輸入一個註釋結束,但如果它與別的結束失敗。在這種情況下,該錯誤信息是一樣
No match (line 13, column 1):
unexpected end of input
expecting "--" or "/*"
所以解析器的時候eof
到達找一個評論。我需要一些幫助找到正確的組合器,我需要在所有可能的情況下吃掉所有的評論。
如果您不想保留註釋,請使用令牌模塊。請參閱原始Parsec 2.0發行版中的示例以使用令牌模塊和LanguageDef's:http://legacy.cs.uu.nl/daan/parsec.html –
這是否需要MySQL的SQL和DDL版本的語言def? – dan
是的。有效地,LangaugeDef是Parsec的詞法分析規範。他們的寫作要比Alex詞法分析器簡單得多 - 儘管他們不那麼強大。 –