1. Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 1
UNIVERSIDAD“GERARDOBARRIOS”
COMPILADORESE INTÉRPRETES
CICLOI –2016
DOCENTE:ING.MARVINPARADA
EJEMPLO DE ANALIZADOR LEXICO-SINTACTICO MINI-DEV
OBJETIVOS
Complementar conceptos teóricos del análisis Léxico y Sintáctico.
Estudiar el código fuente de un programa prototipo de análisis Léxico y Sintáctico desarrollado en
el entorno Dev C++.
El analizador sintáctico (ASN) compru eba que el orden en que el analizador léxico le va entrega ndo los tokens
es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser
generada por la gramática correspon diente al lenguaje del código fuente.
La forma más habitual de representar la sintaxis de un program a es el árbol de análisis sintáctico, y lo que
hacen los analizadores sintácticos es construir una derivación por la izquierda o por la derecha del progr a m a
fuente, que en realidad son dos recorridos determinad os del árbol de análisis sintáctico.
PROTOTIPO DE UN ANALIZADOR LEXICO
Archivos de Código Fuente
Analizador Léxico (Lexico.h)
#ifndef Lexico_H
#define Lexico_H
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string>
#define TAM_BUFFER 100
using namespace std;
class Lexico
{
char *nombreFichero;
FILE* entrada;
int n1;
int traza;
char buffer[TAM_BUFFER];
int pBuffer;
public:
Lexico(char *unNombreFichero, int una_traza=0);
~Lexico(void);
char siguienteToken(void);
Ejemplo1(prueba_lexico.txt):
M
{
R a;
R b;
C = a+ b;
W c;
}
Ejemplo2 (prueba_sintactico.txt):
M
{
R a;
R b;
c = a + b * 2;
W c;
}
7. Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 7
case 1 :cout<<" :ESPERABA UN ;"<<endl;break;
case 2 :cout<<" :ESPERABA UNA }"<<endl;break;
case 3 :cout<<" :ESPERABA UN ="<<endl;break;
case 4 :cout<<" :ESPERABA UN )"<<endl;break;
case 5 :cout<<" :ESPERABA UN IDENTIFICADOR"<<endl;break;
case 6 :cout<<" :INSTRUCCION DESCONOCIDA"<<endl;break;
case 7 :cout<<" :ESPERABA UNA CONSTANTE"<<endl;break;
case 8 :cout<<" :ESPERABA UNA M DE MAIN"<<endl;break;
case 9 :cout<<" :ESPERABA UNA {"<<endl;break;
default:
cout<<" :NO DOCUMENTADO"<<endl;
}
cin>>x;
exit(-(codigo+100));
}
#endif
Programa Principal (Lexico.cpp)
#include<iostream>
#include "Lexico.h"
using namespace std;
int main()
{
Lexico lexico("prueba_lexico.txt",1);
return 0;
}
Programa Principal (Sintactico.cpp)
#include<iostream>
#include "Sintactico.h"
using namespace std;
int main()
{
Sintactico sintactico("prueba_sintactico.txt",1);
return 0;
}
COMPILADORES E INTÉRPRETES
CICLO I – 2016
EJEMPLO DE ANALIZADOR SINTACTICO
IMPRIMIR Y ENTREGAR AL DOCENTE
ALUMNOS
Después de haber ejecutado con éxito el analizador sintáctico responda lo siguiente:
1. Coloque en el archivo prueba.txt algún carácter no reconocido por el lenguaje
MINI-DEV. Vuelva a ejecutar la aplicación generada en C++. ¿Qué observó en la
ejecución? ¿Cuál es la razón del resultado? Realizar capturas de pantalla y
anexar al reporte
8. Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 8
2. Elimine el carácter “;” de alguna de las instrucciones. Vuelva a ejecutar la
aplicación. ¿Qué observó en la ejecución? ¿Cuál es la razón del resultado?
Realizar capturas de pantalla y anexar al reporte
3. Investigar cuáles son los tipos de análisis sintáctico y sus características.
4. Investigar que es la notación LL(K) y LLR, notación EBNF y BNF.