Domanda

Ho un parser che è effettivamente un insieme di funzioni ricorsive che operano su una sequenza di token lexer.

Il problema in cui mi imbatto è che la sequenza sembra ricominciare dall'inizio con chiamate di funzione ricorsive. Data la seguente definizione di scheletro per la funzione 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

La funzione parse_token può provocare una chiamata in Parse .

Tuttavia, quando ciò accade, il parametro token finisce posizionato all'inizio della sequenza.

Qualche idea su come mantenere la sequenza posizionata dove deve essere?

tia

È stato utile?

Soluzione

Penso che potresti dover pubblicare uno snippet leggermente più grande, poiché non ti sto seguendo.

Detto questo, una sequenza (IEnumerable) è proprio quella - una sequenza, e ogni volta che per (foreach) o Seq. Qualunque cosa sopra, "ripeterà" la sequenza. Non sono chiaro cosa tu voglia fare e cosa ti aspetti che accada, ma per un'analisi, rappresentare "token" come una sequenza può essere "sbagliato", poiché in genere dividi i token in una regione consumata / impegnata e in una regione di lookahead.

Nota anche che in genere non vuoi che "iterare su una sequenza" abbia effetti collaterali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top