Está en la página 1de 6

Tarea semana 2.

Leer Capítulo 3 del Libro Compiladores, Principios, Técnicas.

Tarea de investigación sobre el análisis Léxico. Esta tarea debe ser subida en formato
PDF a la plataforma.

Recordar que todo debe ser con sus palabras. Tarea con Plagio tendrá 0 de
calificación automáticamente

Investigar:
Análisis Léxico.
Es la etapa en donde el analizador se encarga de leer los caracteres que son
introducido en el programa fuente, luego de esto los une por lexemas y por ultimo da
el resultado en forma de tokens para cada uno de los lexemas que tiene el
programa. La función principal de este analizador es poder identificar los lexemas
del código fuente.
Tabla de Símbolos (Función, Estructura y Desarrollo).
Se utiliza para obtener toda la información que es necesaria para la entrada de la
información en el compilador para proceder a realizar un análisis en las diversas
etapas que lo compone. Está formado por el nombre del identificador, visibilidad de
variable, tipo de variable y de dato.
Especificación y reconocimiento de componentes léxicos.
En esta parte se utiliza la gramática necesaria en donde debe de comprender. Esta
gramática se convierte en un nuevo lenguaje de programación para luego ser
interpretado por el analizador léxico mediante el uso de las expresiones regulares la
cual ayuda a identificar si la sintaxis es gramatical en el compilador.
Descripción y diseño del analizador léxico.
Se utiliza como procesos que se encarga de eliminar la redundancia de los datos.
También este puede leer la entrada de la información, dando como resultado una
tabla de símbolos.
Ejercicios:
1) Divida el siguiente programa en C++ (Utilizando la tabla del tema 2.2
Tokens, patrones y lexemas del PDF de la semana):
float cuadradoLimitado(x) float x {
/* devuelve x al cuadrado, pero nunca más de 100 */
return (x<=−10.0||x>=10.0)?100:x*x;
}
Tokens Descripción formal Lexema
float Caracteres f,l,o,a,t float
id cuadroLimitado(x) cuadroLimitado(x)
return Caracteres r,e,t,u,r,n return
Comparación <= o >= o || o == o ? <=, >=, ||, ?
Limitadores () : . ; (), :, ., ;

¿Qué lexemas deberían obtener valores léxicos asociados? ¿Cuáles deberían


ser esos valores?
Id, x
Paréntesis izquierdo, (
Paréntesis derecho,)
Punto y coma,;
Dos puntos,:

Expresiones Regulares
Describa el resultado denotados por las siguientes expresiones regulares:
a) a(a|b)*a
En esta busca una hasta infinita veces y una b infinita veces siempre y cuando
este rodeada de de “a”s.
b) ((|a)b*)*.
Aquí reconocerá cualquier número, posición o símbolo que se digite primero
de lo contrario buscara a y b infinita veces y también el conjunto de una
manera infinita veces.

c) (a|b)*a(a|b)(a|b).
Buscará de una manera infinita veces a siempre y cuando se encuentre 3 a y 3
b.
d) a*ba*ba*ba*.
Aquí reconoce a b en pares de 4 si y solo si este en b buscando un patrón de
manera infinitivamente.

Escriba definiciones regulares para los siguientes lenguajes:


a) Todas las cadenas de letras en minúsculas que contengan las cinco
vocales.
/(\W*(aeiou)\W*)(?(1)[a-z])+/gm
b) Todas las cadenas de letras en minúsculas, en las que las letras se
encuentren en orden lexicográfico ascendente.
(a*b*)* = {aa,aaa,ab,abb,bb}
c) Todas las cadenas de dígitos sin dígitos repetidos. Sugerencia: Pruebe este
problema primero con unos cuantos dígitos, como {0, 1, 2}.
/([\d])(\1{0})(?(2)[0-9])+/gm
d) Todas las cadenas de dígitos que tengan por lo menos un dígito repetido.
/([\d])(\1{1})(?(1)[0-9])+/gm
e) Todos los números o cadenas que contengan *97
/(\W*(\*97)\W*)(?(1)[\w])+/gm

Probar Regex en: https://regex101.com/


Crear Diagrama de Transición, siguiendo video explicativo en los recursos:
1) (a|ab)* | b* (a|b)+
Crear Autómatas AFN y AFD, siguiendo video explicativo en los recursos:
1) (a|b)*abb

2) Convertir autómatas a AFD


Crear una tabla de símbolos para los siguiente código:
1) Main:
Main () {
Class a;
Class b = new Class();
CLass c = new Class(5, “g”);
}
Nombre Ámbito Tipo Dato
Main Local Funcion Void
A Local Variable Class
b Local Variable Class
c Local Variable Class

2) Funcion:
float suma(float n1, float n2) {
Return n1 + n2;
}
Nombre Ámbito Tipo Dato
Suma Global Funcion Float
Return Local Funcion Float

3) Clase:
Clase prueba {

Protected int x;
Public string z;

construct(int x, string z) {
this.x = x;
this.z = z;
}
}
Nombre Ámbito Tipo Dato
X Local Variable Int
Z Publico Variable String
Construct Local Método Void
This.x Local Método Int
This.y Local Método String

También podría gustarte