Escolar Documentos
Profissional Documentos
Cultura Documentos
Compilador
PROCESOS DE UN COMPILADOR
➔ Análisis:
◆ En la que se analiza el programa fuente para
dividirlo en componentes y extraer de algún
modo el significado.
◆ Fases:
● Análisis léxico
● Análisis sintáctico
● Análisis semántico
PROCESOS DE UN COMPILADOR
➔ Síntesis:
◆ Se procede a generar grupos de los componentes que
conforman el programa, para generar una salida.
◆ En la que el significado obtenido se escribe en el
lenguaje objeto.
ANÁLISIS LÉXICO
¿QUÉ ES?
◆ Es la herramienta de un compilador la cual ayuda a
leer los caracteres de entrada para formar
componentes y así poder identificarlos y pasar la
información al analizador sintáctico
◆ Representan:
● Palabras reservadas
● Identificadores
● Operadores
● Constantes numéricas
● Constantes de caracteres
¿CUÁL ES SU FUNCIÓN?
◆ Construir elementos léxicos llamados
patrones que serán utilizados posteriormente
por un analizador sintáctico.
Paréntesis Reales
FLEX
● Flex es una herramienta para generar scanners:
● Flex lee los ficheros de entrada dados con la descripción de un escáner a
generar
● La descripción se encuentra en forma de parejas regulares y codigo C,
denominadas reglas.
● Flex genera como salida un fichero fuente en c, lexyy.c, que define una
rutina yylex().
● El fichero lexyy.c se compila y se alcanza con un programa principal muy
simple produciendo como salida una versión ejecutable del reconocedor.
FLEX
● Cuando se arranca el fichero ejecutable, este analiza su entrada en
busca de casos de las expresiones regulares. Siempre que encuentra
uno, ejecuta el código C correspondiente.
Especificación FLEX
● El fichero de entrada de flex está compuesto de tres
secciones, separadas por una línea donde aparece
únicamente un %% en esta.
■ Definiciones
■ %%
■ Reglas
■ %%
■ Código de usuario
Diseño del lenguaje
Objetivos de esta fase:
✓ Identificar tokens.
✓ Lexemas
✓ Expresiones regulares.
Tokens
Ejemplos:
- Palabra reservada: “ cin, cout, if, else, do, while ”.
- Identificador: “ a, cadena, etc ”.
- Operador aritmético: “ +, -, *, / ”.
- Operador lógico: “ ||, &&, ! ”.
Patrón
Patrón
Por ejemplo:
- Definiciones: - Patrón del Entero
dígito [0-9] {signo}?{dígito}+
signo “+” | “-”
FASE II
ANÁLISIS
SINTÁCTICO
¿QUÉ ES?
a. Declaraciones
● En esta sección se definen los símbolos léxicos que se
van a utilizar en la parte sintáctica, normalmente son los
mismos token que definimos en la parte del analizador
léxico.
○ %token
<nombre_del_terminal>
Bison
Declaraciones
%token ENTERO
%token FLOTANTE
%token PALABRA_RESERVADA
%token OPERADOR
%token OPERADOR_LOGICO
%token OPERADOR_RELACIONAL
%token IDENTIFICADOR
Bison
b. Reglas Bison
Es la parte mas importante, aquí escribiremos reglas de producción
correspondientes a una gramática libre de contexto.
<Auxiliar> : <lado_derecho> {<acción>}
| <lado_derecho> {<acción>}
|…
;
● Los símbolos terminales de la gramática se suelen escribir en
mayuscula y nos lo tiene que devolver el analizador léxico y los
auxiliares suelen ir en minúscula.
● Por defecto la primera regla que escribamos corresponderá al símbolo
inicial de la gramática.
Bison
Reglas Bison
instruccion: otraInstruccion
| otraInstruccion instruccion
;
otraInstruccion: asignacion
| declarar_funcion
| llama_funcion
| declaracion
| condicional
;
c. Código de Usuario
Simplemente se ponen código C que se volcará tal cual se escribió al fichero de salida.
int main() {
if ((yyin = fopen("entrada.txt", "rt")) == NULL) {
printf("El archivo no existe");
} else {
yyparse();
}
fclose(yyin);
return 0;
}
CONCLUSIONES
La construcción de este proyecto a permitido saber
como construir un compilado, haciendo uso de sus
distintas etapas.
Se pudo también conocer y tener en cuenta otras
herramientas las cuales ayudan y facilitan la
construcción de los analizadores, tales como, FLEX y
BISON
Durante la realización de este proyecto saltaron a la
vista posibles formas de aplicación de este
copulador, desde hacer búsquedas de archivos,
ordenamientos de archivos y entre otras.