Die Parsec Dokumentation einen LEXER aufzubauen hat:Wiederholung in lexing vermeiden, wenn ein Beispiel der Verwendung <code>makeTokenParser</code> Verwendung Parsek
module Main where
import Text.Parsec
import qualified Text.Parsec.Token as P
import Text.Parsec.Language (haskellDef)
-- The parser
...
expr = parens expr
<|> identifier
<|> ...
-- The lexer
lexer = P.makeTokenParser haskellDef
parens = P.parens lexer
braces = P.braces lexer
identifier = P.identifier lexer
reserved = P.reserved lexer
...
In "The LEXER" Block wird jede P.*
so zu LEXER aufgebracht, dass eine Wiederholungs vermeiden das in "Der Parser" blockieren. Das für jeden Token zu wiederholen ist jedoch immer noch mühsam. Gibt es einen Weg, die Wiederholung noch mehr zu vermeiden? Ich dachte daran, lexer implizit überall in "The Parser" anzuwenden, aber ich weiß nicht wie.
schreiben Wenn Sie ermöglichen 'RecordWildCards', können Sie einfach' P.TokenParser verwenden {..} = lexer' auf der obersten Ebene alle Datensatzfelder zu definieren. – ErikR