Table Of ContentView metadata, citation and similar papers at core.ac.uk brought to you by CORE
provided by Repositorio Digital de la Universidad del Norte
COMPILADORDEPSEUDOCÓDIGOCOMOHERRAMIENTAPARAEL
APRENDIZAJEENLACONSTRUCCIÓNDEALGORITMOS
RAFAELANIBALVEGACASTRO
UNIVERSIDADDELNORTE
PROGRAMADEINGENIERÍADESISTEMAS
DIVISIÓNDEINGENIERÍAS
2008
COMPILADORDEPSEUDOCÓDIGOCOMOHERRAMIENTAPARAEL
APRENDIZAJEENLACONSTRUCCIÓNDEALGORITMOS
RAFAELANIBALVEGACASTRO
TesisparaoptaraltítulodeIngenierodeSistemas
Ing.ALFONSOMANUELMANCILLAHERRERA
DirectordelProyecto
UNIVERSIDADDELNORTE
PROGRAMADEINGENIERÍADESISTEMAS
DIVISIÓNDEINGENIERÍAS
2008
Notadeaceptación
_______________________________
_______________________________
_______________________________
_______________________________
_______________________________
_______________________________
Firmadelpresidentedeljurado
_______________________________
Firmadeljurado
_______________________________
Firmadeljurado
Barranquilla,Diciembrede2008
DEDICATORIA
ADios,quesiempremeiluminó.
A mi padre y madre, por el apoyo que siempre me han brindado, por confiar en mi, por
darmetodoloquehoytengoyporhacermetodoloquesoy.
A mi hermano, quien siempre se alegra por los logros que consigo y quien quiere seguir
losmismopasosqueyoseguígraciasalavocaciónqueDiosnosdio.
A mi novia, que siempre me apoyaba y me llenaba de fuerzas para continuar cuando quería
rendirme..
Amiprimo,quedesdeelcielosiempremeacompaña,alquenuncaolvidaré.
AlIng.AlfonsoMancilla,quiensiemprehaconfiadoenmi,mehatendidosumanoymeha
aconsejadoenlatomademuchasdelasdecisionesmasimportantesenmivida.
Amistías,abuelas,primos,demásfamiliaresyamigos.,
AGRADECIMIENTOS
En mi vida he tenido la posibilidad de trabajar en varios proyectos, pero ninguno que me
diera la satisfacción que siento al terminar los objetivos de este. Digo terminar los objetivos
porqueaesteproyectoselepuedellevarmuylejos.
Agradezco enormemente a todas las ayudas recibidas por parte del Ingeniero Jose Marquez,
jefedelprogramadeIngenieríadeSistemasdelaUniversidaddelNorte,quiensiempresaca-
ba un rato de su valioso tiempo para resolver mis dudas o darme consejos para resolver mis
problemas. No tengo como agradecer al Ingeniero Alfonso Mancilla, docente de planta del
programa de Ingeniería de Sistemas de la Universidad del Norte, mi director de tesis, quien
me dio la oportunidad y me apoyó en la idea que le plantee en un principio, la cual era un
poco ambiciosa, pero el día de hoy nos damos cuenta que cualquier cosa puede lograrse si
tieneladedicaciónylasganasquesenecesitan.
RafaelAnibalVegaCastro
Barranquilla,Colombia
Octubre29de2008
Tabla de Contenido
ListadeFiguras VI
ListadeTablas VII
Introducción 1
1.Objetivos 2
1.1.ObjetivoGeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.ObjetivosEspecíficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.TeoríadeCompiladores 3
2.1.Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1.Conceptodetraductor . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2.Tipodetraductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Traductoresdeidioma . . . . . . . . . . . . . . . . . . . . . . . . . 4
Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Intérpretes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Preprocesadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Intérpretesdecomandos . . . . . . . . . . . . . . . . . . . . . . . . 6
Conversoresfuente-fuente . . . . . . . . . . . . . . . . . . . . . . . 6
Compiladorcruzado . . . . . . . . . . . . . . . . . . . . . . . . . . 7
I
2.1.3.Teoríabásicarelacionadaconlatraducción . . . . . . . . . . . . . . . 7
Pasadasdecompilación . . . . . . . . . . . . . . . . . . . . . . . . 7
Compilaciónincremental . . . . . . . . . . . . . . . . . . . . . . . . 8
Autocompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Descompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Metacompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.4.Estructuradeuntraductor . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.5.Tabladesímbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.Análisislexicográfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1.Procesodeunanalizadorléxico . . . . . . . . . . . . . . . . . . . . . 13
2.2.2.ExpresionesRegulares . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Definicióndeexpresionesregulares . . . . . . . . . . . . . . . . . . 14
Extensionesparalasexpresionesregulares . . . . . . . . . . . . . . 16
2.3.Gramáticaslibresdecontexto . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1.Convencionesdenotación . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.2.Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.3.Ambigüedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.4.Escrituradeunagramática . . . . . . . . . . . . . . . . . . . . . . . . 21
Expresionesregulares,ogramáticaslibresdecontexto . . . . . . . . 21
Comprobacióndellenguajegeneradoporunagramática . . . . . . . 22
Eliminacióndelarecursiónporlaizquierda . . . . . . . . . . . . . . 22
Factorizaciónporlaizquierda . . . . . . . . . . . . . . . . . . . . . 23
2.4.Análisissintácticoascendente . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4.1.Visióngeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.2.ElementosLR(0)yanálisissintácticoLR(0) . . . . . . . . . . . . . . . 26
ElementoLR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
ElalgoritmodeanálisissintácticoLR(0) . . . . . . . . . . . . . . . . 27
II
2.4.3.AnálisissintácticoLALR(1)yLR(1)general . . . . . . . . . . . . . . 28
ELalgoritmodeanálisissintácticoLR(1) . . . . . . . . . . . . . . . 28
AnálisissintácticoLALR(1) . . . . . . . . . . . . . . . . . . . . . . 29
3.JFlex-AnalizadorLéxico 31
3.1.Principalescaracterísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.EscribirunanalizadorléxicoconJFlex . . . . . . . . . . . . . . . . . . . . . 31
3.2.1.Estructuradeunarchivojflex . . . . . . . . . . . . . . . . . . . . . . 31
3.2.2.Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.3.Reglasyacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.Métododeescaneo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4.Generacióndecódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5.Codificacióndecaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6.Reglasléxicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6.1.Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6.2.Operadoresenlasexpresionesregulares . . . . . . . . . . . . . . . . . 39
3.6.3.Precedenciadeoperadores . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7.MétodosyatributosdeJFlexasequiblesenelcódigodeacción . . . . . . . . . 41
4.CUP-AnalizadorSintáctico 43
4.1.Especificacióndelasintaxisdeunfichero.CUP . . . . . . . . . . . . . . . . . 44
4.1.1.Definicióndepaqueteysentenciasimport . . . . . . . . . . . . . . 44
4.1.2.Seccióndecódigodeusuario . . . . . . . . . . . . . . . . . . . . . . 45
4.1.3.Declaracióndesímbolosterminalesynoterminales . . . . . . . . . . 46
4.1.4.Declaracionesdeprecedencia . . . . . . . . . . . . . . . . . . . . . . 47
4.1.5.Definicióndelsímboloinicialdelagramáticayreglasdeproducción . 48
4.2.EjecutandoCUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.UsodelasclasesJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
III
4.4.GestióndeerroresenCUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.5.GramáticadelasespecificacionesdeunarchivoCUP . . . . . . . . . . . . . . 53
5.OtrasHerramientasutilizadas 56
5.1.C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1.1.E/SConsoladeC++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1.2.Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Tiposdedatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.3.Estructurasdecontrol . . . . . . . . . . . . . . . . . . . . . . . . . . 57
If-Si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
If-Else-Si-Sino . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
switch-Dependiendo-De . . . . . . . . . . . . . . . . . . . . . . . 58
5.1.4.Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
while-Mientras-Que . . . . . . . . . . . . . . . . . . . . . . . . . . 59
for-Para . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
do-while-Haga-Hasta . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2.JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2.1.EntornosdedesarrolloparaJava . . . . . . . . . . . . . . . . . . . . . 62
5.2.2.Sintaxisdellenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Sintaxisbásica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tipodedatosprimitivos . . . . . . . . . . . . . . . . . . . . . . . . 63
Declaracióndevariables . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.1.¿QuéesPHP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.2.Unaexplicaciónsencilla . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.3.InstruccionesenPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
IV
Estructurasdecontrol . . . . . . . . . . . . . . . . . . . . . . . . . 71
Ciclosobucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3.4.SesionesenPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4.HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.1.¿QuéesHTML? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.2.SintaxisdelasEtiquetas . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.3.EtiquetasHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
TITLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
BODY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
FONT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
TR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
TD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
FORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
OPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
TEXTAREA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.5.JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.5.1.EncabezadoJavaScipt . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.5.2.ElObjetoForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.5.3.Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.5.4.VariablesenJavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . 83
V
Description:APRENDIZAJE EN LA CONSTRUCCIÓN DE ALGORITMOS. RAFAEL ANIBAL VEGA CASTRO. Tesis para optar al título de Ingeniero de Sistemas.