Uploaded by Manuel Francisco Albarracín

Compilador tiny

advertisement
Pasos para ejecutar el compilador tiny
1) Instalar el “Xcode Tools” para Mac, que viene en el DVD de instalación “Mac OS X”.
2) Descargar de la página web http://www.cs.sjsu.edu/~louden/cmptext/ el archivo
“loucomp.tar.z “.
3) Descomprimir el archivo que se descargo, el cual contiene el código fuente del
compilador.
4) Entrar al directorio “loucomp”.
5) Compilar los archivos fuente del compilador, a través del comando MAKE, el cual debe
teclearse en el promp dentro del directorio. El comando MAKE, ejecuta los comandos e
instrucciones contenidas en el archivo makefile, que en nuestro caso contiene las
instrucciones para compilar con gcc cada uno de los archivos fuentes del programa.
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
que en nuestro caso teclearemos en el promp:
./tiny sample.tny.
7) El compilador tiny genera un archivo con extensión tm (sample.tm), el cual contiene las
instrucciones que el programa que compiló va a llevar a cabo. Cabe mencionar que estas
instrucciones están en lenguaje ensamblador.
8) Para poder ejecutar el programa que se compiló, es necesario contar con un programa
que traduzca las instrucciones del lenguaje ensamblador, para ello está el programa TM.
Es necesario compilarlo para ello introducimos la siguiente instrucción desde el promp:
gcc tm.c –o tm.
9) El archivo resultante (tm) nos permitira traducir las instrucciones en lenguaje
ensamblador, para ello se utiliza la siguiente instrucción:
./tm sample.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,
para nuestro caso (en sample.tny) se tienen las instrucciones para calcular el factorial de
un número. Para poder introducir el número a calcular, primero debemos presionar
enter, después introducir el comando “go + enter” y después el número (y enter) al que
deseamos calcular su factorial; posteriormente se desplegara el resultado. Finalmente
es necesario teclear el comando “quit + enter” para poder salir del programa.
COMPILADOR
Documents nicandrocruzramirez$ cd loucomp
loucomp nicandrocruzramirez$ 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
oucomp nicandrocruzramirez$ MAKE
gcc ‐c main.c
gcc main.o util.o scan.o parse.o symtab.o analyze.o code.o cgen.o ‐o tiny
loucomp nicandrocruzramirez$ 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
loucomp nicandrocruzramirez$ ./tiny sample.tny
TINY COMPILATION: sample.tny
loucomp nicandrocruzramirez$ gcc tm.c ‐o tm
loucomp nicandrocruzramirez$ ls
Makefile
code.c
parse.c
scan.h
analyze.c
code.h
parse.h
scan.o
analyze.h
code.o
parse.o
symtab.c
analyze.o
globals.h
readme.unx symtab.h
cgen.c
lex
sample.tm symtab.o
cgen.h
main.c
sample.tny tiny
cgen.o
main.o
scan.c
tm
tm.c
util.c
util.h
util.o
yacc
loucomp nicandrocruzramirez$ ./tm sample.tm
TM simulation (enter h for help)...
Enter command: warning: this program uses gets(), which is unsafe.
Enter command: go
Enter value for IN instruction: 5
OUT instruction prints: 120
HALT: 0,0,0
Halted
Enter command: quit
Simulation done.
loucomp nicandrocruzramirez$
Para poder obtener el analizador léxico del compilador Tiny es necesario llevar a cabo las
siguientes instrucciones:
1) Cambiar el valor de las banderas (de FALSO a VERDADERO) que corresponden al
analizador léxico en el programa MAIN.C, las cuales son:
int EchoSource = TRUE;
int TraceScan = TRUE;
2) Guardar los cambios efectuados al archivo MAIN.C.
3) Ejecutar nuevamente el comando MAKE
4) Correr con el compilador tiny el programa que deseado:
./tiny sample.tny
5) En pantalla tiny desplegara el analizador léxico correspondiente.
Para poder obtener el analizador sintáctico del compilador Tiny es necesario llevar a cabo las
siguientes instrucciones:
1) Cambiar el valor de las banderas (de FALSO a VERDADERO) que corresponden al
analizador sintáctico en el programa MAIN.C, las cuales son:
int TraceParse = TRUE;
2) Guardar los cambios efectuados al archivo MAIN.C.
3) Ejecutar nuevamente el comando MAKE
4) Correr con el compilador tiny el programa que deseado:
./tiny sample.tny
5) En pantalla tiny desplegara el analizador sintáctico correspondiente.
Para poder obtener el analizador semántico del compilador Tiny es necesario llevar a cabo las
siguientes instrucciones:
1) Cambiar el valor de las banderas (de FALSO a VERDADERO) que corresponden al
analizador semántico en el programa MAIN.C, las cuales son:
int TraceAnalyze = TRUE;
2) Guardar los cambios efectuados al archivo MAIN.C.
3) Ejecutar nuevamente el comando MAKE
4) Correr con el compilador tiny el programa que deseado:
./tiny sample.tny
5) En pantalla tiny desplegara el analizador semántico correspondiente.
ANALIZADOR LEXICO
loucomp nicandrocruzramirez$ ./tiny sample.tny
TINY COMPILATION: SAMPLE.TNY
1: { Sample program
2: in TINY language ‐
3: computes factorial
4: }
5: read x; { input an integer }
5: reserved word: read
5: ID, name= x
5: ;
6: if 0 < x then { don't compute if x <= 0 }
6: reserved word: if
6: NUM, val= 0
6: <
6: ID, name= x
6: reserved word: then
7: fact := 1;
7: ID, name= fact
7: :=
7: NUM, val= 1
7: ;
8: repeat
8: reserved word: repeat
9: fact := fact * x;
9: ID, name= fact
9: :=
9: ID, name= fact
9: *
9: ID, name= x
9: ;
10: x := x ‐ 1
10: ID, name= x
10: :=
10: ID, name= x
10: ‐
10: NUM, val= 1
11: until x = 0;
11: reserved word: until
11: ID, name= x
11: =
11: NUM, val= 0
11: ;
12: write fact { output factorial of x }
12: reserved word: write
12: ID, name= fact
13: end
13: reserved word: end
14: EOF
loucomp nicandrocruzramirez$
ANALIZADOR SINTACTICO
loucomp nicandrocruzramirez$ ./tiny sample.tny
TINY COMPILATION: SAMPLE.TNY
Syntax tree:
Read: x
If
Op: <
Const: 0
Id: x
Assign to: fact
Const: 1
Repeat
Assign to: fact
Op: *
Id: fact
Id: x
Assign to: x
Op: ‐
Id: x
Const: 1
Op: =
Id: x
Const: 0
Write
Id: fact
loucomp nicandrocruzramirez$
ANALIZADOR SEMANTICO
loucomp nicandrocruzramirez$ ./tiny sample.tny
TINY COMPILATION: SAMPLE.TNY
Building Symbol Table...
Symbol table:
Variable Name Location Line Numbers
‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐
x
0
5 6 9 10 10 11
fact
1
7 9 9 12
Checking Types...
Type Checking Finished
loucomp nicandrocruzramirez$
Para la generación de código con el compilador Tiny es necesario llevar a cabo las siguientes
instrucciones:
1) Cambiar el valor de la bandera (de FALSO a VERDADERO) que corresponden a la
generación de código en el programa MAIN.C:
int TraceCode = TRUE;
2) Guardar los cambios efectuados al archivo MAIN.C.
3) Ejecutar nuevamente el comando MAKE
4) Correr con el compilador tiny el programa que deseado:
./tiny sample.tny
5) En el archivo sample.tm se guardará el código que tiny generó con el programa
sample.tny
Download