Estoy experimentando con los combinadores de analizadores y a menudo me encuentro con lo que parecen recurrencias infinitas. Aquí está el primero con el que me encontré:Combinador de analizador no finalizado - ¿cómo registrar lo que está pasando?
import util.parsing.combinator.Parsers
import util.parsing.input.CharSequenceReader
class CombinatorParserTest extends Parsers {
type Elem = Char
def notComma = elem("not comma", _ != ',')
def notEndLine = elem("not end line", x => x != '\r' && x != '\n')
def text = rep(notComma | notEndLine)
}
object CombinatorParserTest {
def main(args:Array[String]): Unit = {
val p = new CombinatorParserTest()
val r = p.text(new CharSequenceReader(","))
// does not get here
println(r)
}
}
¿Cómo puedo imprimir lo que está pasando? ¿Y por qué esto no termina?
creo que EOF se introduce artificialmente, pero tienes razón al decir que se analiza en varias ocasiones en que parece estar siempre en repetidas ocasiones, cuando se solicite un carácter adicional cuando la entrada ya está al final de la secuencia. – huynhjl