chcę analizować wejściowych ciągów tak: "this is \"test \" message \"sample\" text"
Parser dla cudzysłowie wykorzystaniem Parsek
Teraz Pisałem parser do parsowania indywidualny tekst bez żadnych cytatów:
parseString :: Parser String
parseString = do
char '"'
x <- (many $ noneOf "\"")
char '"'
return x
ten analizuje proste łańcuchy jak ten : "test message"
Potem napisał parser dla cudzysłowami:
quotedString :: Parser String
quotedString = do
initial <- string "\\\""
x <- many $ noneOf "\\\""
end <- string "\\\""
return $ initial ++ x ++ end
Ten parser dla ciągów takich jak ten: \"test message\"
Czy istnieje sposób, że mogę połączyć oba parsery, aby uzyskać pożądany cel? Jaki jest dokładnie idomatyczny sposób rozwiązania tego problemu?
Dlaczego chcesz usunąć początkowe i końcowe znaki cudzysłowu, ale pozostawić nienaruszone odwrotne ukośniki? Sądzę, że chciałbyś przetworzyć dane wejściowe '" \ "ab \\\" c \ "" 'jako albo" "\" ab \\\ "c \" "(parsowanie ściśle dla sprawdzania poprawności) lub jako' "ab \" c "', ale wydaje się, że chcesz '' ab \\\ "c" ', co nie wydaje się tak oczywiste. – dfeuer
@dfeuer Bez szczególnego powodu graliśmy z Parsesem. – Sibi