Pregunta

Tengo un analizador que es efectivamente un conjunto de funciones recursivas que funcionan en una secuencia de tokens lexer.

El problema con el que me encuentro es que la secuencia parece reiniciarse desde el principio en llamadas a funciones recursivas. Dada la siguiente definición de esqueleto para la función 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 función parse_token puede provocar una llamada a Parse .

Sin embargo, cuando eso sucede, el parámetro tokens termina posicionado al comienzo de la secuencia.

¿Alguna idea sobre cómo mantener la secuencia posicionada donde debe estar?

tia

¿Fue útil?

Solución

Creo que es posible que necesites publicar un fragmento un poco más grande, ya que no te estoy siguiendo del todo.

Dicho esto, una secuencia (IEnumerable) es solo eso: una secuencia, y cada vez que usted (foreach) o Seq. Lo que sea que ocurra sobre ella, 'repetirá' la secuencia. No tengo claro qué desea hacer y qué espera que suceda, pero para un análisis, representar 'tokens' como una secuencia puede ser 'incorrecto', ya que generalmente divide los tokens en una región consumida / comprometida y una región anticipada.

Tenga en cuenta también que normalmente no desea que 'iterar sobre una secuencia' tenga efectos secundarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top