Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Análisis Léxico
Docente:
Alumno:
Susan León Sebastian Salazar
28.465.047
Fernando Rodríguez 27.589.678
San diego, 29 de abril de 2023
Funciones del análisis léxico
Funciones secundarias
Como el analizador léxico es la parte del compilador que lee el texto fuente.
También puede realizar ciertas funciones secundarias en la interfaz del usuario,
como eliminar del programa fuente comentarios y espacios en blanco en forma de
caracteres de espacio en blanco, caracteres TAB y de línea nueva. Otra función es
relacionar os mensajes de error del compilador con el programa fuente. Por
ejemplo, el analizador léxico puede tener localizado el número de caracteres de
nueva línea detectados, de modo que se pueda asociar un número de línea con un
mensaje de error.
Las expresiones regulares son una notación importante para especificar patrones.
Cada patrón concuerda con una serie de cadenas, de modo que las expresiones
regulares servirán como nombres para conjuntos de cadenas.
Cadenas y lenguajes
Una cadena sobre algún alfabeto es una secuencia finita de símbolos tomados de
ese alfabeto. En teoría del lenguaje, los términos frase y palabra a menudo se
utilizan como sinónimos del término "cadena". La longitud de una cadena s, que
suele escribirse lsl, es el número de apariciones de símbolos en s. Por ejemplo,
camino es una cadena de longitud seis. La cadena vacía, representada por Є, es
una cadena especial de longitud cero.
Hay varias operaciones importantes que se pueden aplicar a los lenguajes. Para el
análisis léxico, interesan principalmente la unión, la concatenación y la cerradura.
Reconocimiento de los componentes léxicos: autómatas finitos.
|Є
| término
término -> id
| núm
donde los terminales if, then, else, oprel, id y núm generan conjuntos de cadenas
dados por las siguientes definiciones regulares:
if -> if
Además, se supone que los lexemas están separados por espacio en blanco,
formados por secuencias no nulas de espacios en blanco, caracteres TAB y
caracteres de nueva línea. El analizador léxico eliminará los espacios en blanco.
Esto lo hará comparando una cadena con la definición de la expresión regular eb
siguiente.
eb -> delim+
Se usa una variable para almacenar el estado actual y una estructura tipo “case”
doble anidada. El primer “case” comprueba el estado actual y el siguiente el
carácter en la entrada. Las transiciones se corresponden con asociar un nuevo
estado a la variable y avanzar en la entrada
state = 1;
while (state == 1 o 2) do
case state
1: case ch
fin_case;
2: case ch
fin_case;
fin_case;
fin_while;
Se asume que los campos en blanco son errores. Los estados de aceptación se
marcan con una columna adicional. Los corchetes representan que no se tiene
que consumir un carácter en la entrada (no avanzar).
state = 1;
ch = next_input_character;
state=newstate;
end while;
Por ejemplo: <> se interpreta como el operador “distinto de”, en vez de “menor
que” y “mayor que”
Funcionamiento:
Compilador de C
lex.yy.c a.out
gcc -1
gcc -1f1