SlideShare una empresa de Scribd logo
1 de 8
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;
}
Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 2
void devuelveToken(char toke);
int lineaActual(void){return n1; };
int existeTraza(void){if(traza)return 1; else return 0;}
};
Lexico::Lexico(char *unNombreFichero, int una_traza)
{
entrada=fopen(unNombreFichero, "rt");
if((entrada==NULL))
{
cout<<"No se puede abrir el archivo"<<endl;
system("pause");
exit(-2);
}
if(una_traza) traza=1;
else traza = 0;
n1=1;
pBuffer=0;
}
Lexico::~Lexico()
{
fclose(entrada);
}
char Lexico::siguienteToken(void)
{
char car;
while((car=((pBuffer>0) ? buffer[--pBuffer]:getc(entrada)))!=EOF)
{
if(car==' ') continue;
if(car=='n'){++n1; continue;}
break;
}
if(traza) cout<<"ANALIZADOR LEXICO: Lee el token"<<car<<endl;
switch(car)
{
case'M':
case'R':
case'W':
case'=':
case'(':
case')':
case';':
case'}':
case'{':
case'.':
case'+':
case'*':
case'-':
case'/':
case'%':
return(car);
}
if(islower(car))return(car);
else if(isdigit(car)) return(car);
else
{
cout<<"Error Lexico: Token Desconocido"<<endl;
system("pause");
exit(-4);
}
return(car);
}
void Lexico::devuelveToken(char token)
Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 3
{
if(pBuffer>TAM_BUFFER)
{
cout<<"ERROR: Desbordamiento de buffer del analizador léxico"<<endl;
system("pause");
exit(-5);
}
else
{
buffer[pBuffer++]=token;
if(existeTraza())
cout<<"ANALIZADOR LEXICO: Recibe en buffer el token"<<token<<endl;
system("pause");
}
}
#endif
Analizador Sintáctico (Sintactico.h)
#ifndef Sintactico_H
#define Sintactico_H
#include "lexico.h"
#include <stdlib.h>
using namespace std;
class Sintactico{
void programa (void);
void bloque (void);
void sentencia (void);
void otra_sentencia (void);
void asignacion(void);
void lectura (void);
void escritura(void);
void variable(void);
void expresion(void);
void termino(void);
void mas_terminos(void);
void factor(void);
void mas_factores(void);
void constante(void);
void errores (int codigo);
Lexico lexico; //objeto léxico miembro de la clase
public:
Sintactico(char *fuente, int traza);
~Sintactico(void);
};
Sintactico::Sintactico(char *fuente, int traza):lexico(fuente, traza)
//se inicializa el constructor de la clase léxico
{
if (lexico.existeTraza())
cout<<"INICIO DE ANALISIS SINTACTICO"<<endl;
programa();
}
/********************************************************************/
Sintactico::~Sintactico(void)
{
if (lexico.existeTraza())
{
cout<<"FIN DE ANALISIS SINTACTICO"<<endl;
cout<<"FIN DE COMPILACION"<<endl;
}
}
/********************************************************************/
void Sintactico::programa(void)
Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 4
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <PROGRAMA>"<<endl;
token=lexico.siguienteToken();
if (token=='M') cout <<"M";
else errores(8);
token=lexico.siguienteToken();
if (token!='{') errores(9);
bloque();
token=lexico.siguienteToken();
if (token=='}')
{
cout<<"}";
}
else errores(2);
}
/************************************************************************/
void Sintactico::bloque(void)
{
char token=' ';
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <BLOQUE>"<<endl;
sentencia();
otra_sentencia();
}
/**********************************************************************/
void Sintactico::otra_sentencia(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <OTRA_SENTENCIA>"<<endl;
token=lexico.siguienteToken();
if (token==';')
{
sentencia();
otra_sentencia();
}
else lexico.devuelveToken(token); //vacio
}
/*********************************************************************/
void Sintactico::sentencia(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <SENTENCIA>"<<endl;
token=lexico.siguienteToken();
if ((token>='a') && (token<='z'))
{
lexico.devuelveToken(token);
asignacion();
}
else if (token=='R') lectura();
else if (token=='W') escritura();
else errores(6);
}
/**********************************************************************/
void Sintactico::asignacion()
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <ASIGNACION>"<<endl;
variable();
token=lexico.siguienteToken();
if (token!='=') errores(3);
Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 5
expresion();
}
/*********************************************************************/
void Sintactico::variable(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <VARIABLE>"<<endl;
token=lexico.siguienteToken();
if ((token>='a') && (token<='z')) cout<<token;
else errores(5);
}
/********************************************************************/
void Sintactico::expresion(void)
{
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <EXPRESION>"<<endl;
termino();
mas_terminos();
}
/*********************************************************************/
void Sintactico::termino(void)
{
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <TERMINO>"<<endl;
factor();
mas_factores();
}
/*********************************************************************/
void Sintactico::mas_terminos(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <MAS_TERMINOS>"<<endl;
token=lexico.siguienteToken();
if (token=='+')
{
termino();
mas_terminos();
}
else if (token =='-')
{
termino();
mas_terminos();
}
else lexico.devuelveToken(token); // <vacio>
}
/*********************************************************************/
void Sintactico::factor(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <FACTOR>"<<endl;
token=lexico.siguienteToken();
if ((token>='0') && (token<='9'))
{
lexico.devuelveToken(token);
constante();
}
else if (token=='(')
{
expresion();
token=lexico.siguienteToken();
if (token!=')') errores(4);
}
Clase #8 –Unidad 3. Análisis Sintáctico
UGB 2016 Página 6
else
{
lexico.devuelveToken(token);
variable();
}
}
/*********************************************************************/
void Sintactico::mas_factores(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <MAS_FACTORES>"<<endl;
token=lexico.siguienteToken();
switch (token)
{
case '*':factor();
mas_factores();
break;
case '/':factor();
mas_factores();
break;
case '%':factor();
mas_factores();
break;
default: //<vacio>
lexico.devuelveToken(token);
}
}
/*********************************************************************/
void Sintactico::lectura(void)
{
char token;
token=lexico.siguienteToken();
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <LECTURA> "<<token<<endl;
if((token<'a')||(token>'z')) errores(5);
}
/**********************************************************************/
void Sintactico::escritura(void)
{
char token;
token=lexico.siguienteToken();
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <ESCRITURA> "<<token<<endl;
if ((token<'a') || (token>'z')) errores(5);
}
/************************************************/
void Sintactico::constante(void)
{
char token;
if (lexico.existeTraza())
cout<<"ANALISIS SINTACTICO: <CONSTANTE>"<<endl;
token=lexico.siguienteToken();
if ((token>='0') && (token<='9')) cout<<token;
else errores(7);
}
/*******************************************************************/
void Sintactico::errores(int codigo)
{
int x;
cout<<"LINEA "<<lexico.lineaActual();
cout<<" ERROR SINTACTICO "<<codigo;
switch (codigo)
{
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
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.

Más contenido relacionado

La actualidad más candente

Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con CupLAUNASA NOVENO B
 
Actividad 3
Actividad 3Actividad 3
Actividad 3maryr_
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosInfomania pro
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintacticoalexisdario
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semanticoAreli Gómez
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladoresbachispasaca
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladoresCJAO
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador ADOLFOISAIASGARCIASI
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a CompiladoresLeopoldo Capa
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
Analizador Sintactico
Analizador SintacticoAnalizador Sintactico
Analizador SintacticoBayo Chicaiza
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoangiepao1717
 
Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)MARCO POLO SILVA SEGOVIA
 

La actualidad más candente (20)

Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
Actividad 3
Actividad 3Actividad 3
Actividad 3
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptos
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladores
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Clase15
Clase15Clase15
Clase15
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a Compiladores
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Analizador Sintactico
Analizador SintacticoAnalizador Sintactico
Analizador Sintactico
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintáctico
 
Algoritmos y programacion en C++
Algoritmos y programacion en C++Algoritmos y programacion en C++
Algoritmos y programacion en C++
 
Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)
 
Compiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico ConceptosCompiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico Conceptos
 

Similar a Clase8 3 ejemplo analisis lexico-sintactico miniugb

Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Germán Ferrari
 
Compiladores - Incorporacion de una Tabla de Simbolos Compiladores
Compiladores - Incorporacion de una Tabla de Simbolos CompiladoresCompiladores - Incorporacion de una Tabla de Simbolos Compiladores
Compiladores - Incorporacion de una Tabla de Simbolos Compiladoresjose haar
 
Incorporacion De Una Tabla De Simbolos Compiladores
Incorporacion De Una Tabla De Simbolos CompiladoresIncorporacion De Una Tabla De Simbolos Compiladores
Incorporacion De Una Tabla De Simbolos Compiladoresguest5fa3fc
 
Unidad16 Codigof1
Unidad16 Codigof1Unidad16 Codigof1
Unidad16 Codigof1martha leon
 
Ejemplos Importantisimo
Ejemplos  ImportantisimoEjemplos  Importantisimo
Ejemplos Importantisimomartha leon
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresChristian Lara
 
Python Tutorial Presentation
Python Tutorial PresentationPython Tutorial Presentation
Python Tutorial Presentationguestccc92ad
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Universidad
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabrielEnrique Morales
 

Similar a Clase8 3 ejemplo analisis lexico-sintactico miniugb (20)

TABLA DE SIMBOLOS
TABLA DE SIMBOLOSTABLA DE SIMBOLOS
TABLA DE SIMBOLOS
 
Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03
 
Compiladores - Incorporacion de una Tabla de Simbolos Compiladores
Compiladores - Incorporacion de una Tabla de Simbolos CompiladoresCompiladores - Incorporacion de una Tabla de Simbolos Compiladores
Compiladores - Incorporacion de una Tabla de Simbolos Compiladores
 
Incorporacion De Una Tabla De Simbolos Compiladores
Incorporacion De Una Tabla De Simbolos CompiladoresIncorporacion De Una Tabla De Simbolos Compiladores
Incorporacion De Una Tabla De Simbolos Compiladores
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Modelo Simulado
Modelo SimuladoModelo Simulado
Modelo Simulado
 
Unidad16 Codigof1
Unidad16 Codigof1Unidad16 Codigof1
Unidad16 Codigof1
 
Ejemplos Importantisimo
Ejemplos  ImportantisimoEjemplos  Importantisimo
Ejemplos Importantisimo
 
Cpp
CppCpp
Cpp
 
Cpp
CppCpp
Cpp
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladores
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
Python Tutorial Presentation
Python Tutorial PresentationPython Tutorial Presentation
Python Tutorial Presentation
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabriel
 

Más de Infomania pro

Clase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlinkClase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlinkInfomania pro
 
Clase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorInfomania pro
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semanticoInfomania pro
 
Compiladores clase02
Compiladores clase02Compiladores clase02
Compiladores clase02Infomania pro
 
Mapa mental y esquemas
Mapa mental y esquemasMapa mental y esquemas
Mapa mental y esquemasInfomania pro
 
Clase2 introduccion-compiladores-interpretes
Clase2 introduccion-compiladores-interpretesClase2 introduccion-compiladores-interpretes
Clase2 introduccion-compiladores-interpretesInfomania pro
 
Clase2 clasificacion de interpretes
Clase2 clasificacion de interpretesClase2 clasificacion de interpretes
Clase2 clasificacion de interpretesInfomania pro
 
Compilador: DEFINICIÓN
Compilador: DEFINICIÓNCompilador: DEFINICIÓN
Compilador: DEFINICIÓNInfomania pro
 

Más de Infomania pro (12)

Clase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlinkClase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlink
 
Manual80x86
Manual80x86Manual80x86
Manual80x86
 
Clase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensamblador
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Clase09 guia1-as
Clase09 guia1-asClase09 guia1-as
Clase09 guia1-as
 
Compiladores clase02
Compiladores clase02Compiladores clase02
Compiladores clase02
 
Tabla simbolos
Tabla simbolosTabla simbolos
Tabla simbolos
 
TABLA DE SÍMBOLOS
TABLA DE SÍMBOLOSTABLA DE SÍMBOLOS
TABLA DE SÍMBOLOS
 
Mapa mental y esquemas
Mapa mental y esquemasMapa mental y esquemas
Mapa mental y esquemas
 
Clase2 introduccion-compiladores-interpretes
Clase2 introduccion-compiladores-interpretesClase2 introduccion-compiladores-interpretes
Clase2 introduccion-compiladores-interpretes
 
Clase2 clasificacion de interpretes
Clase2 clasificacion de interpretesClase2 clasificacion de interpretes
Clase2 clasificacion de interpretes
 
Compilador: DEFINICIÓN
Compilador: DEFINICIÓNCompilador: DEFINICIÓN
Compilador: DEFINICIÓN
 

Último

2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 

Último (20)

2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 

Clase8 3 ejemplo analisis lexico-sintactico miniugb

  • 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; }
  • 2. Clase #8 –Unidad 3. Análisis Sintáctico UGB 2016 Página 2 void devuelveToken(char toke); int lineaActual(void){return n1; }; int existeTraza(void){if(traza)return 1; else return 0;} }; Lexico::Lexico(char *unNombreFichero, int una_traza) { entrada=fopen(unNombreFichero, "rt"); if((entrada==NULL)) { cout<<"No se puede abrir el archivo"<<endl; system("pause"); exit(-2); } if(una_traza) traza=1; else traza = 0; n1=1; pBuffer=0; } Lexico::~Lexico() { fclose(entrada); } char Lexico::siguienteToken(void) { char car; while((car=((pBuffer>0) ? buffer[--pBuffer]:getc(entrada)))!=EOF) { if(car==' ') continue; if(car=='n'){++n1; continue;} break; } if(traza) cout<<"ANALIZADOR LEXICO: Lee el token"<<car<<endl; switch(car) { case'M': case'R': case'W': case'=': case'(': case')': case';': case'}': case'{': case'.': case'+': case'*': case'-': case'/': case'%': return(car); } if(islower(car))return(car); else if(isdigit(car)) return(car); else { cout<<"Error Lexico: Token Desconocido"<<endl; system("pause"); exit(-4); } return(car); } void Lexico::devuelveToken(char token)
  • 3. Clase #8 –Unidad 3. Análisis Sintáctico UGB 2016 Página 3 { if(pBuffer>TAM_BUFFER) { cout<<"ERROR: Desbordamiento de buffer del analizador léxico"<<endl; system("pause"); exit(-5); } else { buffer[pBuffer++]=token; if(existeTraza()) cout<<"ANALIZADOR LEXICO: Recibe en buffer el token"<<token<<endl; system("pause"); } } #endif Analizador Sintáctico (Sintactico.h) #ifndef Sintactico_H #define Sintactico_H #include "lexico.h" #include <stdlib.h> using namespace std; class Sintactico{ void programa (void); void bloque (void); void sentencia (void); void otra_sentencia (void); void asignacion(void); void lectura (void); void escritura(void); void variable(void); void expresion(void); void termino(void); void mas_terminos(void); void factor(void); void mas_factores(void); void constante(void); void errores (int codigo); Lexico lexico; //objeto léxico miembro de la clase public: Sintactico(char *fuente, int traza); ~Sintactico(void); }; Sintactico::Sintactico(char *fuente, int traza):lexico(fuente, traza) //se inicializa el constructor de la clase léxico { if (lexico.existeTraza()) cout<<"INICIO DE ANALISIS SINTACTICO"<<endl; programa(); } /********************************************************************/ Sintactico::~Sintactico(void) { if (lexico.existeTraza()) { cout<<"FIN DE ANALISIS SINTACTICO"<<endl; cout<<"FIN DE COMPILACION"<<endl; } } /********************************************************************/ void Sintactico::programa(void)
  • 4. Clase #8 –Unidad 3. Análisis Sintáctico UGB 2016 Página 4 { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <PROGRAMA>"<<endl; token=lexico.siguienteToken(); if (token=='M') cout <<"M"; else errores(8); token=lexico.siguienteToken(); if (token!='{') errores(9); bloque(); token=lexico.siguienteToken(); if (token=='}') { cout<<"}"; } else errores(2); } /************************************************************************/ void Sintactico::bloque(void) { char token=' '; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <BLOQUE>"<<endl; sentencia(); otra_sentencia(); } /**********************************************************************/ void Sintactico::otra_sentencia(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <OTRA_SENTENCIA>"<<endl; token=lexico.siguienteToken(); if (token==';') { sentencia(); otra_sentencia(); } else lexico.devuelveToken(token); //vacio } /*********************************************************************/ void Sintactico::sentencia(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <SENTENCIA>"<<endl; token=lexico.siguienteToken(); if ((token>='a') && (token<='z')) { lexico.devuelveToken(token); asignacion(); } else if (token=='R') lectura(); else if (token=='W') escritura(); else errores(6); } /**********************************************************************/ void Sintactico::asignacion() { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <ASIGNACION>"<<endl; variable(); token=lexico.siguienteToken(); if (token!='=') errores(3);
  • 5. Clase #8 –Unidad 3. Análisis Sintáctico UGB 2016 Página 5 expresion(); } /*********************************************************************/ void Sintactico::variable(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <VARIABLE>"<<endl; token=lexico.siguienteToken(); if ((token>='a') && (token<='z')) cout<<token; else errores(5); } /********************************************************************/ void Sintactico::expresion(void) { if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <EXPRESION>"<<endl; termino(); mas_terminos(); } /*********************************************************************/ void Sintactico::termino(void) { if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <TERMINO>"<<endl; factor(); mas_factores(); } /*********************************************************************/ void Sintactico::mas_terminos(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <MAS_TERMINOS>"<<endl; token=lexico.siguienteToken(); if (token=='+') { termino(); mas_terminos(); } else if (token =='-') { termino(); mas_terminos(); } else lexico.devuelveToken(token); // <vacio> } /*********************************************************************/ void Sintactico::factor(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <FACTOR>"<<endl; token=lexico.siguienteToken(); if ((token>='0') && (token<='9')) { lexico.devuelveToken(token); constante(); } else if (token=='(') { expresion(); token=lexico.siguienteToken(); if (token!=')') errores(4); }
  • 6. Clase #8 –Unidad 3. Análisis Sintáctico UGB 2016 Página 6 else { lexico.devuelveToken(token); variable(); } } /*********************************************************************/ void Sintactico::mas_factores(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <MAS_FACTORES>"<<endl; token=lexico.siguienteToken(); switch (token) { case '*':factor(); mas_factores(); break; case '/':factor(); mas_factores(); break; case '%':factor(); mas_factores(); break; default: //<vacio> lexico.devuelveToken(token); } } /*********************************************************************/ void Sintactico::lectura(void) { char token; token=lexico.siguienteToken(); if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <LECTURA> "<<token<<endl; if((token<'a')||(token>'z')) errores(5); } /**********************************************************************/ void Sintactico::escritura(void) { char token; token=lexico.siguienteToken(); if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <ESCRITURA> "<<token<<endl; if ((token<'a') || (token>'z')) errores(5); } /************************************************/ void Sintactico::constante(void) { char token; if (lexico.existeTraza()) cout<<"ANALISIS SINTACTICO: <CONSTANTE>"<<endl; token=lexico.siguienteToken(); if ((token>='0') && (token<='9')) cout<<token; else errores(7); } /*******************************************************************/ void Sintactico::errores(int codigo) { int x; cout<<"LINEA "<<lexico.lineaActual(); cout<<" ERROR SINTACTICO "<<codigo; switch (codigo) {
  • 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.