Sunteți pe pagina 1din 6

Pasosparaejecutarelcompiladortiny 1) InstalarelXcodeToolsparaMac,quevieneenelDVDdeinstalacinMacOSX. 2) Descargar de la pgina web http://www.cs.sjsu.edu/~louden/cmptext/ el archivo loucomp.tar.z.

z. 3) Descomprimir el archivo que se descargo, el cual contiene el cdigo fuente del compilador. 4) Entraraldirectorioloucomp. 5) Compilarlosarchivosfuentedelcompilador,atravsdelcomandoMAKE,elcualdebe teclearseenelprompdentrodeldirectorio.ElcomandoMAKE,ejecutaloscomandose instrucciones contenidas en el archivo makefile, que en nuestro caso contiene las instruccionesparacompilarcongcccadaunodelosarchivosfuentesdelprograma. 6) El comando MAKE genera un archivo ejecutable de nombre tiny.exe. Este archivo permite compilar un programa (codigo fuente) con el nuevo compilador (tiny). Por lo queennuestrocasoteclearemosenelpromp: ./tinysample.tny. 7) Elcompiladortinygeneraunarchivoconextensintm(sample.tm),elcualcontienelas instruccionesqueelprogramaquecompilvaallevaracabo.Cabemencionarqueestas instruccionesestnenlenguajeensamblador. 8) Parapoderejecutarelprogramaquesecompil,esnecesariocontarconunprograma quetraduzcalasinstruccionesdellenguajeensamblador,paraelloestelprogramaTM. Esnecesariocompilarloparaellointroducimoslasiguienteinstruccindesdeelpromp: gcctm.cotm. 9) El archivo resultante (tm) nos permitira traducir las instrucciones en lenguaje ensamblador,paraelloseutilizalasiguienteinstruccin: ./tmsample.tm. 10) TM ejecutar las instrucciones del programa (sample.tny) que tiny compilo. Cabe mencionar que es necesario seguir las instrucciones que tiene el programa compilado, paranuestrocaso(ensample.tny)setienenlasinstruccionesparacalcularelfactorialde un nmero. Para poder introducir el nmero a calcular, primero debemos presionar enter,despusintroducirelcomandogo+enterydespuselnmero(yenter)alque deseamos calcular sufactorial;posteriormentesedesplegaraelresultado.Finalmente esnecesarioteclearelcomandoquit+enterparapodersalirdelprograma.

COMPILADOR Documentsnicandrocruzramirez$cdloucomp loucompnicandrocruzramirez$ls Makefile cgen.o main.c sample.tny symtab.o analyze.c code.c main.o scan.c tm.c analyze.h code.h parse.c scan.h util.c analyze.o code.o parse.h scan.o util.h cgen.c globals.h parse.o symtab.c util.o cgen.h lex readme.unx symtab.h yacc l oucompnicandrocruzramirez$MAKE gcccmain.c gccmain.outil.oscan.oparse.osymtab.oanalyze.ocode.ocgen.ootiny loucompnicandrocruzramirez$ls Makefile code.c parse.c scan.o util.h analyze.c code.h parse.h symtab.c util.o analyze.h code.o parse.o symtab.h yacc analyze.o globals.h readme.unx symtab.o cgen.c lex sample.tny tiny cgen.h main.c scan.c tm.c cgen.o main.o scan.h util.c loucompnicandrocruzramirez$./tinysample.tny TINYCOMPILATION:sample.tny loucompnicandrocruzramirez$gcctm.cotm loucompnicandrocruzramirez$ls Makefile code.c parse.c scan.h tm.c analyze.c code.h parse.h scan.o util.c analyze.h code.o parse.o symtab.c util.h analyze.o globals.h readme.unx symtab.h util.o cgen.c lex sample.tm symtab.o yacc cgen.h main.c sample.tny tiny cgen.o main.o scan.c tm loucompnicandrocruzramirez$./tmsample.tm TMsimulation(enterhforhelp)... Entercommand:warning:thisprogramusesgets(),whichisunsafe. Entercommand:go EntervalueforINinstruction:5 OUTinstructionprints:120 HALT:0,0,0 Halted Entercommand:quit Simulationdone. loucompnicandrocruzramirez$

ParapoderobtenerelanalizadorlxicodelcompiladorTinyesnecesariollevaracabolas siguientesinstrucciones: 1) Cambiarelvalordelasbanderas(deFALSOaVERDADERO)quecorrespondenal analizadorlxicoenelprogramaMAIN.C,lascualesson:


int EchoSource = TRUE; int TraceScan = TRUE;

2) GuardarloscambiosefectuadosalarchivoMAIN.C. 3) EjecutarnuevamenteelcomandoMAKE 4) Correrconelcompiladortinyelprogramaquedeseado: ./tinysample.tny 5) Enpantallatinydesplegaraelanalizadorlxicocorrespondiente. ParapoderobtenerelanalizadorsintcticodelcompiladorTinyesnecesariollevaracabolas siguientesinstrucciones: 1) Cambiarelvalordelasbanderas(deFALSOaVERDADERO)quecorrespondenal analizadorsintcticoenelprogramaMAIN.C,lascualesson:


int TraceParse = TRUE;

2) GuardarloscambiosefectuadosalarchivoMAIN.C. 3) EjecutarnuevamenteelcomandoMAKE 4) Correrconelcompiladortinyelprogramaquedeseado: ./tinysample.tny 5) Enpantallatinydesplegaraelanalizadorsintcticocorrespondiente. ParapoderobtenerelanalizadorsemnticodelcompiladorTinyesnecesariollevaracabolas siguientesinstrucciones: 1) Cambiarelvalordelasbanderas(deFALSOaVERDADERO)quecorrespondenal analizadorsemnticoenelprogramaMAIN.C,lascualesson:


int TraceAnalyze = TRUE;

2) GuardarloscambiosefectuadosalarchivoMAIN.C. 3) EjecutarnuevamenteelcomandoMAKE 4) Correrconelcompiladortinyelprogramaquedeseado: ./tinysample.tny 5) Enpantallatinydesplegaraelanalizadorsemnticocorrespondiente.

ANALIZADORLEXICO loucompnicandrocruzramirez$./tinysample.tny TINYCOMPILATION:SAMPLE.TNY 1:{Sampleprogram 2:inTINYlanguage 3:computesfactorial 4:} 5:readx;{inputaninteger} 5:reservedword:read 5:ID,name=x 5:; 6:if0<xthen{don'tcomputeifx<=0} 6:reservedword:if 6:NUM,val=0 6:< 6:ID,name=x 6:reservedword:then 7:fact:=1; 7:ID,name=fact 7::= 7:NUM,val=1 7:; 8:repeat 8:reservedword:repeat 9:fact:=fact*x; 9:ID,name=fact 9::= 9:ID,name=fact 9:* 9:ID,name=x 9:; 10:x:=x1 10:ID,name=x 10::= 10:ID,name=x 10: 10:NUM,val=1 11:untilx=0; 11:reservedword:until 11:ID,name=x 11:= 11:NUM,val=0 11:; 12:writefact{outputfactorialofx} 12:reservedword:write 12:ID,name=fact 13:end 13:reservedword:end 14:EOF loucompnicandrocruzramirez$

ANALIZADORSINTACTICO loucompnicandrocruzramirez$./tinysample.tny TINYCOMPILATION:SAMPLE.TNY Syntaxtree: Read:x If Op:< Const:0 Id:x Assignto:fact Const:1 Repeat Assignto:fact Op:* Id:fact Id:x Assignto:x Op: Id:x Const:1 Op:= Id:x Const:0 Write Id:fact loucompnicandrocruzramirez$

ANALIZADORSEMANTICO loucompnicandrocruzramirez$./tinysample.tny TINYCOMPILATION:SAMPLE.TNY BuildingSymbolTable... Symboltable: VariableNameLocationLineNumbers x0569101011 fact179912 CheckingTypes... TypeCheckingFinished loucompnicandrocruzramirez$

ParalageneracindecdigoconelcompiladorTinyesnecesariollevaracabolassiguientes instrucciones: 1) Cambiarelvalordelabandera(deFALSOaVERDADERO)quecorrespondenala generacindecdigoenelprogramaMAIN.C:


int TraceCode = TRUE;

2) GuardarloscambiosefectuadosalarchivoMAIN.C. 3) EjecutarnuevamenteelcomandoMAKE 4) Correrconelcompiladortinyelprogramaquedeseado: ./tinysample.tny 5) Enelarchivosample.tmseguardarelcdigoquetinygenerconelprograma sample.tny

S-ar putea să vă placă și