J'ai une situation idiote dans mes analyseurs parsec sur laquelle j'aimerais recevoir votre aide.Analyser un seul caractère qoute dans une chaîne entre guillemets
J'ai besoin d'analyser une séquence de forts/caractères séparés par | personnages. Ainsi, nous pourrions avoir un | b | 'c' | 'abcd'
qui devrait être transformé en
[a,b,c,abcd]
espace n'est pas autorisé, à moins que l'intérieur d'une chaîne ''. Maintenant, dans ma tentative naïve, j'ai maintenant la situation où je peux analyser des chaînes comme a'a | 'bb' à [a'a, bb] mais pas aa | 'b'b' à [aa, b'b] .
singleQuotedChar :: Parser Char
singleQuotedChar = noneOf "'" <|> try (string "''" >> return '\'')
simpleLabel = do
whiteSpace haskelldef
lab <- many1 (noneOf "|")
return $ lab
quotedLabel = do
whiteSpace haskelldef
char '\''
lab <- many singleQuotedChar
char '\''
return $ lab
Maintenant, comment puis-je dire à l'analyseur de considérer 'un arrêt' si cela est suivi par un | ou un espace blanc? (Ou, obtenez un peu de caractère compte dans cela). L'entrée est générée par l'utilisateur, donc je ne peux pas compter sur les caractères.
Vous essayez d'analyser '' b'b'', mais dans 'singleQuotedChar' vous avez besoin que les guillemets simples n'apparaissent que par paires. Vouliez-vous essayer d'analyser '' b''b'' comme 'b'b'? Si vous voulez que '' b'b '' soit analysable, vous devez changer la définition de singleQuotedChar. – rampion
Comment l'analyseur est-il supposé savoir qu'il devrait garder le milieu 'aa''b'b'? J'ai du mal à comprendre ce que tu veux faire. Est-ce comme un tableau de parenthèse, mais n'est valide qu'en tant que tel à côté d'un |? Pourquoi l'avoir du tout si c'est le cas? (Réponse possible: cela fait partie d'une entrée plus grande où les espaces signifient autre chose.) – AndrewC
Voici ce que je pense que vous voulez dire: Une chaîne est une séquence de lettres (ou de nombres?), D'apostrophes et d'espaces entre apostrophes ou une séquence de lettres (nombres) et apostrophes non encadrées par des apostrophes. Les chaînes sont interpolées avec des barres verticales. – AndrewC