Sto scrivendo il mio primo programma con Parsec. Voglio analizzare i dump dello schema di MySQL e vorrei creare un buon modo per analizzare stringhe che rappresentano determinate parole chiave in modo non sensibile al maiuscolo/minuscolo. Ecco un codice che mostra l'approccio che sto usando per analizzare "CREATE" o "create". C'è un modo migliore per farlo? Una risposta che non ricorra a buildExpressionParser sarebbe la cosa migliore. Sto facendo piccoli passi qui.Qual è il modo più semplice per eseguire l'analisi senza distinzione tra maiuscole e minuscole con 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
Suppongo che 'map toLower' sull'input prima che anche l'esecuzione del parser non sia un'opzione? Inoltre, mi aspetterei che "case insensitive" corrisponda anche a "Create", "CrEaTe", "CREATe" o qualsiasi altra variazione, che il tuo esempio rifiuta. Quale vuoi? –
Questo funziona. Grazie. Non ci avevo pensato! – dan
@dan State attenti che se il vostro input contiene stringhe, saranno anch'esse in minuscolo. Ad esempio, se una delle tue colonne contiene valori di stringa predefiniti. –