2017-01-15 2 views
2

Lorsque vous utilisez d'autres analyseurs, existe-t-il une option pour obtenir quelle entrée correspond à l'analyseur.Alternatives FParsec obtenant l'analyseur qui a analysé l'entrée

Ma chaîne d'entrée peut être comme ci-dessous le format

{firstPart_number} {secondPart_operator_symbol} {thirdPart} 

Ici firstPart est toujours numéro, la deuxième partie est analyseur alternative à analyser l'opérateur et thirdPart est également alternatif (nombre, liste de chaînes).

entrée échantillon

1 + 2 
5 * 3 
1 in {2,45,6} 

Depuis mes syndicats discriminés sont de différents types, je veux savoir quelle analyseur d'entrée adapté de telle sorte que sur cette base parser je peux créer une instance de mon discriminante type union?

Comment gérer cette situation dans FParsec, où ma première partie est le même à travers parseurs mais deuxième et troisième parseurs sont différents et en fonction de ce type de instancier en utilisant |>>

+0

Pourriez-vous nous montrer un extrait de code (pas tout le code, juste un extrait court pertinent) afin que nous puissions voir comment vous accrochez vos analyseurs syntaxiques alternatives? Il est difficile d'imaginer votre code à partir de la description que vous avez donnée. – rmunn

+0

Une pensée que j'ai eue était que vous pourriez avoir chaque analyseur alternatif enveloppé dans un opérateur '| >>'. Quelque chose comme 'laissez pOperator = (pstr" * "| >> OpTimes) <|> (pstr" + "| >> OpPlus) <|> (pstr" dans "| >> OpIn)'. Mais j'aimerais voir votre code pour que je puisse donner de meilleures suggestions. – rmunn

Répondre

0

mon problème actuel a été résolu en utilisant l'analyseur de tentative avec des solutions de rechange. La tentative retournera en arrière si elle ne correspond pas et l'analyseur suivant analysera à nouveau l'entrée et appariera