Frage

Ich habe einen Parser, der effektiv eine Reihe von rekursiven Funktionen ist auf einer Folge von Lexer Token arbeiten.

Das Problem in Ich renne ist, dass die Sequenz von Anfang an auf rekursive Funktionsaufrufe zu starten scheint. Angesichts der folgenden Skelett-Definition für die Funktion Parse

    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

Die Funktion parse_token in einem Aufruf in Parse führen kann.

jedoch, wenn das passiert, endet die Parameter tokens am Anfang der Sequenz positioniert werden.

Alle Ideen, wie die Sequenz zu halten positioniert, wo es sein muss?

tia

War es hilfreich?

Lösung

Ich glaube, Sie müssen einen etwas größeren Schnipsel schreiben, da ich ziemlich bin nicht Sie folgen.

Das heißt, eine Folge (IEnumerable) ist genau das - eine Sequenz, und jedes Mal, wenn Sie für (foreach) oder Seq.Whatever darüber, wird es wieder Iterierte 'die Folge. Ich bin nicht klar, was Sie tun wollen, und was Sie passieren erwarten, aber für einen Parse, was ‚Token‘ als eine Folge sein kann ‚falsch‘, wie Sie in der Regel Partition Token in eine verbrauchte / engagierte Region und ein Look-Ahead-Bereich.

Beachten Sie auch, dass Sie in der Regel nicht wollen ‚über eine Sequenz iterieren‘ Nebenwirkungen zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top