Es posible analizar un documento con una sola pasada desde una máquina de estado. ¿Cuál es el beneficio de tener dos pases, es decir. ¿Tiene un lexer para convertir texto en tokens y un analizador para probar las reglas de producción en esos tokens? ¿Por qué no tener una sola pasada que aplique las reglas de producción directamente al texto?
15
Respuestas:
No tienes que separarlos. La gente los combina en analizadores sin escáner .
La desventaja clave de los analizadores sin escáner parece ser que las gramáticas resultantes son bastante complicadas, más complicadas que la combinación correspondiente de una expresión regular que hace lexing y una gramática libre de contexto que analiza en el token-stream. En particular, las gramáticas para el análisis sin escáner tienden a la ambigüedad. Es más fácil eliminar la ambigüedad para las gramáticas que trabajan en un token-stream.
Un beneficio pragmático de usar una fase de lexing inicial dedicada es que no combina el analizador posterior con detalles léxicos. Esto es útil durante el desarrollo temprano del lenguaje de programación, cuando los detalles léxicos y sintácticos todavía cambian con frecuencia.
fuente