Please enable JavaScript.
Coggle requires JavaScript to display documents.
Capítulo 3 Análisis léxico image - Coggle Diagram
Capítulo 3
Análisis léxico
Fichas léxicas
El papel de la fase de análisis léxico de un compilador es
leer el programa que se está compilando
dividiendo la entrada en una secuencia de tokens
Cada token representa un componente sintáctico básico del
lenguaje que se está compilando
Elección de la lista de tokens
La primera tarea es usar la especificación del lenguaje de entrada
producir una lista de todos los tokens léxicos que
el analizador léxico debería reconocer
Uso de una gramática Chomsky
para la especificación de tokens léxicos
Problemas con tokens particulares
Implementación observando algunas de las cosas que pueden salir mal.
identificadores se describen como
"comenzando con una letra, seguida de una secuencia de letras o dígitos".
Los problemas de sensibilidad al contexto surgen en un analizador léxico cuando
la naturaleza de un token léxico puede depender de su contexto
Representación interna de tokens
estructura del flujo de tokens,
tiene que pasar al analizador de sintaxis
El compilador usa el tabla de símbolos para almacenar información
Implementación basada en herramientas
Técnicas para la producción automatizada de analizadores léxicos
Lex toma como entrada un conjunto de expresiones
regulares que definen los tokens
Hacia un analizador léxico para C
Uso de herramientas de software para la generación de analizadores léxicos
La estructura de alto nivel de la entrada es simple
La sección consta de un conjunto de pares de nombre / definición
Un ejemplo simple
. El lenguaje para el que se escribe este analizador léxico
Incluye solo tres tokens léxicos
Un "número",
Cualquier otro personaje
Una “palabra”,
Un analizador léxico para DL
DL es un lenguaje simple
con un pequeño conjunto de tokens léxicos
Las definiciones de espacio_blanco, letra, dígito, letra_o_dígito
hacen simplemente para mejorar la legibilidad en la sección de reglas
Hacia un analizador léxico C
Empezar codificando las expresiones regulares
para reconocer los tokens individuales,
Las identidades de los tokens reconocidos por el
analizador léxico se devuelven como números enteros
pero para que el código sea un poco más legible y fác
La atención al detalle es el mensaje clave
Comparación con una implementación directa
Examinación de dos enfoques distintos
Para la construcción de un analizador léxico
También son posibles enfoques, en los que algunos de los tokens
se reconocen mediante código escrito a mano y los
demás mediante las reglas de expresión regular
Los analizadores léxicos para DL se han escrito a mano y también utilizando fl ex
Es importante utilizar la herramienta adecuada
Implementación directa
Construcción de compiladore
con el objetivo de presentar técnicas funcionales
Enfoques para la construcción de analizadores léxicos
implementación directa de analizadores léxicos programándolos desde cero
Planificación de un analizador léxico
Analizador léxico como una función (o procedimiento o método),
Este examinará los caracteres de la entrada
puede leer hasta el final del token y almacenarlo
la constante MAXIDLEN proporciona un límite superior en la longitud de un identificador
hace posible el uso de matrices de longitud fija
Reconocimiento de tokens individuales
Codificación manual de un analizador léxico
Aborda el reconocimiento de los tipos de tokens individuales
Espacio en blanco
Se pueden insertar libremente entre tokens léxicos
o es factible ni sensato depender de la existencia de
espacios en blanco para separar todos los tokens.
Fichas de un solo carácter
Valor de ch determinará, pero no de forma única
la naturaleza del token que se reconoce
el código para tratar con el token '/' tendrá que ser rediseñado porque el personaje
Otras fichas cortas
Es fácil ver que hay algunos tokens más de un solo carácter
código de reconocimiento más sofisticado
no se permiten espacios en blanco entre los dos caracteres.
Identificadores y palabras reservadas
Las constantes enteras se manejan de manera estándar
convirtiendo un flujo de caracteres de dígitos decimales en un binario interno
posible utilizar la función de biblioteca C atoi
Comentarios
El lenguaje DL admite comentarios entre corchetes /
y
/.
La variable ingreso está establecido en TRUE
El comentario finaliza si se detecta el final de la entrada
Errores
Puede detectar una serie de errores, como leer un carácter inesperado
tales errores deben comunicarse al usuario del compilado
el compilador tiene que recuperar el error
para que el análisis de la entrada pueda continuar.
Una vez que el analizador de sintaxis se ha integrado con el analizador léxico
Está lidiando satisfactoriamente con los errores
Problemas más generales
Se puede desarrollar una estructura envolvente simple que contenga
Piezas individuales de código para tratar con cada uno de los tokens léxicos
Un analizador léxico para un lenguaje real requiere
Decisiones de diseño adicionales
una atención cuidadosa a los detalles de codificación.
Identificadores y palabras reservadas
Las reglas deben seguirse en el analizador léxico.
El analizador léxico necesita acceso a una estructura de datos
La búsqueda rápida es deseable mantener la eficiencia de la compilación
Constantes numéricas
Las constantes de punto flotante tienen una sintaxis más compleja
requieren un enfoque sistemático para la codificación de su análisis léxico
Prueba
El analizador léxico no debería ser demasiado difícil de probar
la prueba debe ser sistemática y exhaustiva
Idiomas difíciles
Lenguajes en los que solo se puede distinguir entre palabras clave
e identificadores examinando el contexto
las soluciones prácticas pueden tener que recurrir al análisis léxico
Evaluación
Estructura general del analizador léxico es intuitiva
con una clara separación entre las secciones de código que tratan con cada token individual
Expresiones regulares
Especificar la sintaxis de los tokens léxicos en términos de una gramática de estado finito
Especificación y uso de expresiones regulares
Las expresiones regulares surgen de las gramáticas de Chomsky tipo 3
Reconocimiento de instancias de expresiones regulares
Transformar un conjunto de expresiones regulares en código que reconozca instancias
Forma de gráfico dirigido a partir de una expresión regular
Máquinas de estados finito
es ideal para generando instancias de la expresión regular
En esta forma de diagrama de transición hay un único estado inicial
Este enfoque proporciona un analizador eficiente
para instancias de expresiones regulares
Representar expresiones regulares como máquinas de estado finito
permite un análisis sintáctico eficiente
el código del analizador es simple, controlado por un gráfico dirigido