Una limitación común de las secuencias de entrada es que solo puede leer de ellas secuencialmente, no puede regresar o leer desde una posición aleatoria, y cuando lee algo, ya no está presente en la secuencia. Entonces, digamos que queremos analizar strim “1b” para verificar si es un número. Leemos “1”, y creemos que podría ser. Luego leemos “b” y nos damos cuenta de que no es un número, pero podría ser algo más que podríamos analizar. Consumimos dos personajes de la secuencia, y no podemos volver a ponerlos allí. Tampoco podemos dejarlos en la corriente: se los quitaron leyendo. Entonces tenemos que volver (Falso, “1b”). Uno podría preguntarse “por qué las transmisiones tienen esta limitación” y hay varias razones. Una es que ahorramos memoria de esta manera, al no almacenar cosas en la secuencia que ya no se necesitan allí. Otra es que detrás del flujo hay un código que produce más contenido, se pausó cuando hay contenido en el flujo y se reanudó para producir más datos cuando sea necesario, por lo que las operaciones de lectura / escritura se utilizan como señales para iniciar / detener esto. código. Una solución común es crear un contenedor para la secuencia que combine la secuencia y el búfer y permita avanzar según sea necesario, pero debajo del capó aún tendrá el concepto de datos restantes.
Analizador de programación: ¿por qué devolvemos los datos restantes (no consumidos) mientras escribimos un analizador?
Related Content
Cómo entender el análisis amortizado y por qué lo necesitamos
¿Se puede utilizar el aprendizaje automático para encontrar públicos objetivo para anuncios?
¿Cómo obtuvieron sus nombres los recorridos de árbol binario preorden, inorder y postorder?
Se trata de composición. Desea escribir un analizador más grande componiendo analizadores más pequeños. Por ejemplo, para analizar una fecha en el formato mm.dd.yy, escribe un analizador mensual, un analizador diario y un analizador anual. Luego agrega un carácter de punto literal ‘.’ analizador y combinarlos en el orden correcto.
Si la entrada es “01.21.16”, el analizador de mes consume “01”. Devuelve el token de enero y la entrada restante, que es “.21.16”. El analizador de puntos obtiene esta nueva entrada, consume un punto y devuelve el resto “21.16”. Eso es lo que obtiene el analizador diario, y así sucesivamente … Cada paso de análisis, si tiene éxito, consume parte de la entrada y pasa el resto al siguiente paso de análisis.
More Interesting
¿Cuál es la diferencia entre un algoritmo de autoaprendizaje y un algoritmo de IA?
¿Qué es la matriz? Por favor explique los detalles.
¿Qué significa que el algoritmo TD (en el aprendizaje por refuerzo) hace predicción y no control?
¿Por qué no se utilizan algoritmos genéticos?
¿Cómo determinan el nivel de dificultad del sudoku mientras diseñan?
Cómo demostrar que O (f (n) - g (n)) no es necesariamente igual a O (f (n)) - O (g (n))
¿Cuál es el criterio de elección para el desarrollo de algoritmos recursivos o iterativos?
¿A qué libro se refirió Thomas Cormen mientras estudiaba algoritmos?
¿Cuál es el mejor factor de contracción para un tipo de peine? ¿Por qué?
¿Cuál es la complejidad temporal del algoritmo de búsqueda binaria?