Haskell Je suis en train d'analyser un langage basé sur indentation (pensez Python, Haskell lui-même, Boo, YAML) en Haskell utilisant parsec. Je l'ai vu la bibliothèque IndentParser, et il semble que c'est le match parfait, mais ce que je ne peux pas comprendre comment faire mon TokenParser
dans un analyseur d'indentation. Voici le code que j'ai jusqu'à présent:syntaxes à base Indentation d'analyse syntaxique parsec
import qualified Text.ParserCombinators.Parsec.Token as T
import qualified Text.ParserCombinators.Parsec.IndentParser.Token as IT
lexer = T.makeTokenParser mylangDef
ident = IT.identifier lexer
Cela jette l'erreur:
parser2.hs:29:28:
Couldn't match expected type `IT.TokenParser st'
against inferred type `T.GenTokenParser s u m'
In the first argument of `IT.identifier', namely `lexer'
In the expression: IT.identifier lexer
In the definition of `ident': ident = IT.identifier lexer
Qu'est-ce que je fais mal? Comment dois-je créer un IT.TokenParser
? Ou est IndentParser cassé et à éviter?
Vous, monsieur, êtes génial! Je vous remercie! Comment avez-vous su que j'utilisais Parsec 3? Un invité? Parce que je pense que mon exemple pourrait être soit ... – pavpanchekha
J'ai peur que mon travail de détective ici ne soit pas vraiment excitant: j'ai compilé votre code avec Parsec 3, j'ai eu une erreur similaire à la vôtre, puis essayé Parsec 2, travaillé. Au fait, il semble que ce ne serait pas trop compliqué d'utiliser IndentParser avec Parsec 3; vous pourriez envisager de donner un coup de feu si vous trouvez IndentParser utile. –
Je pourrais, mais maintenant je ne fais qu'apprendre Haskell; J'ai peur de me perdre dans une base de code étrangère comme ça. – pavpanchekha