Question

J'ai un analyseur syntaxique qui est en réalité un ensemble de fonctions récursives fonctionnant sur une séquence de jetons lexer.

Le problème que je rencontre est que la séquence semble reprendre depuis le début lors d'appels de fonction récursifs. Étant donné la définition du squelette suivante pour la fonction Analyser

    let restricted = Seq.take_while token_search tokens
    let compiled_nodes = Seq.fold (fun list (next: Lexer.Token) -> list @ parse_token this restricted next) [] restricted

La fonction parse_token peut entraîner un appel dans Parse .

Cependant, lorsque cela se produit, le paramètre tokens se positionne au début de la séquence.

Avez-vous des idées sur la façon de garder la séquence positionnée là où elle doit être?

tia

Était-ce utile?

La solution

Je pense que vous devrez peut-être publier un extrait un peu plus gros, car je ne vous suis pas tout à fait.

Cela dit, une séquence (IEnumerable) n’est que cela - une séquence, et chaque fois que vous le faites (pour chaque) ou que vous le fassiez, quoi qu’il en soit, il "répétera" la séquence. Je ne sais pas ce que vous voulez faire et ce que vous souhaitez, mais pour une analyse, représenter des "jetons" en tant que séquence peut être "faux", car vous partitionnez généralement des jetons en une région consommée / engagée et en une région en attente.

Notez également que vous ne souhaitez généralement pas que les "itérations sur une séquence" aient des effets secondaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top