parsec
attoparsec lub parsec w haskell
Muszę przetworzyć niektóre pliki i przekonwertować je na predefiniowane typy danych.
Haskell wydaje się dostarczać do tego d ... a jest różnica między tymi dwoma, a który z nich lepiej nadaje się do parsowania pliku tekstowego zgodnie z pewnymi zasadami?
Jakie są zalety parsowania aplikacyjnego nad parsowaniem monadycznym?
Wydaje się, że istnieje konsensus, że powinieneś używać Parsec jako aplikatora, a nie monady. Jakie są zalety parsowania aplikacyjnego nad parsowaniem monadycznym?
style
wydajność
abstrakcja
Czy monadyczny parsuje?
Czy kombinatory parserów mogą być wydajne?
Około 6 lat temu, porównałem moje własne kombinatory parserów w OCaml i odkryłem, że były ~5× wolniejsze niż Generatory parse ... -1) f (n-1) f (n-1) f (n-1)
let () =
let n = try int_of_string Sys.argv.(1) with _ -> 3 in
fprintf stdout "%a\n" f n
Czy powinienem używać lexera podczas korzystania z biblioteki parsera, takiej jak Parsec?
Podczas pisania parsera w bibliotece kombinatorów parserów, takiej jak Parsec Haskella, zwykle masz 2 opcje:
napisz lexer, ... iektórzy nazywają), z prostotą cytowaną jako głównym powodem.
Jakie są ogólne kompromisy między Lex-em a nie robieniem tego?
Pełne przykłady parserów z parsec?
Próbuję stworzyć parser dla prostego języka funkcjonalnego, trochę jak Caml, ale wydaje mi się, że utknąłem z najprostszymi r ... OrIdent = do
name <- identifier
liftM (FuncCall name) (parens $ commaSep expr) <|> return (Identifier name)
Parsec: Applicatives vs Monads
Dopiero zaczynam od Parsec (mam małe doświadczenie w Haskell), i jestem trochę zdezorientowany w używaniu monad lub aplikator ... dy i aplikatory (używać ich, gdy są bardziej przydatne niż inne)
Jeśli ostatnia odpowiedź brzmi: tak, powinienem to zrobić?
Jaka jest zaleta używania generatora parserów, takiego jak happy, w przeciwieństwie do używania kombinatorów parserów?
Aby nauczyć się pisać i analizować gramatykę bez kontekstu chcę wybrać narzędzie. Dla Haskell istnieją dwie duże opcje: Happy ... opisu gramatycznego i * Parsec, który pozwala na bezpośrednie kodowanie parsera w Haskell.
Jakie są (dis)zalety obu podejść?
Haskell / Parsec: jak używać tekstu.Parsec.Token z tekstem.Parsec.Indent (z pakietu indents)
Pakiet indenty dla Parsec Haskella zapewnia sposób na analizę języków wcięć (takich jak Haskell i Python). Redefiniuje typ P ... .Parsec.Tiret
Niestety, żaden z powyższych przykładów nie używa parserów tokenowych, takich jak te w tekście.Parsec.Token.
Haskell Parsec-komunikaty o błędach są mniej pomocne podczas korzystania z własnych tokenów
Pracuję nad oddzieleniem etapów Lex i parsowania parsera. Po kilku testach zdałem sobie sprawę, że komunikaty o błędach są mn ... (linia 1, kolumna 1):
unexpected (Ide "asdf","test" (linia 1, kolumna 3))
oczekiwanie Ide " ok " lub Ide "nop"
Używanie Parseka z danymi.Tekst
Używając Parsec 3.1, możliwe jest parsowanie kilku typów wejść:
[Char] z Text.Parsec.String
Data.ByteString z Text.Pars ... y1 (char 'y')
x2 <- many1 (char 'x')
return (T.pack x1, T.pack y, T.pack x2)
test = runParser parser () "test" input