Piszę swój pierwszy program z Parsec. Chcę analizować zrzuty schematów MySQL i chciałbym wymyślić ładny sposób analizowania ciągów reprezentujących określone słowa kluczowe w sposób niewrażliwy na wielkość znaków. Oto kod ilustrujący podejście, którego używam do analizy "CREATE" lub "create". Czy jest lepszy sposób to zrobić? Odpowiedź, która nie ucieka się do buildExpressionParser, byłaby najlepsza. Biorę tutaj małe kroki.Jaki jest najczystszy sposób na przetwarzanie niewrażliwe na wielkość liter w 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
Zakładam, że 'map to to Lower' na wejściu, zanim nawet uruchomienie parsera nie jest opcją? Ponadto oczekuję, że "wielkość liter nie będzie odpowiednia", aby dopasować również "Utwórz", "Definiuj", "Twórz" lub dowolną inną odmianę, którą Twój przykład odrzuci. Które chcesz? –
To działa. Dzięki. Nie pomyślałem o tym! – dan
@dan Po prostu pamiętaj, że jeśli twoje dane wejściowe zawierają ciągi znaków, będą również pisane małymi literami. Na przykład, jeśli dowolna kolumna zawiera domyślne wartości ciągu. –