我正在用Parsec寫我的第一個程序。我想解析MySQL模式轉儲,並希望提出一種很好的方式來解析代表某些關鍵字的字符串,以不區分大小寫的方式。這裏有一些代碼展示了我用來解析「CREATE」或「create」的方法。有一個更好的方法嗎?不會求助於buildExpressionParser的答案是最好的。我在這裏採取嬰兒的步驟。用Text.Combinators.Parsec做不區分大小寫的分析的最乾淨的方法是什麼?
p_create_t :: GenParser Char st Statement
p_create_t = do
x <- (string "CREATE" <|> string "create")
xs <- manyTill anyChar (char ';')
return $ CreateTable (x ++ xs) [] -- refine later
我假設即使運行解析器之前,輸入映射toLower'不是一個選項嗎?此外,我希望「不區分大小寫」也可以匹配「創建」,「CrEaTe」,「CREATe」或您的示例拒絕的任何其他變體。你要哪個? –
這確實有用。謝謝。我沒有想到這一點! – dan
@dan只要注意,如果你的輸入包含字符串,它們也會被小寫。例如,如果您的任何列包含默認的字符串值。 –