You are on page 1of 17

USAC

UNIVERSIDAD DE SAN CARLOS DE


GUATEMALA FACULTAD DE INGENIERIA
COMPILADORES 1

PROYECTO
1

Sergio Fernando Espantzay Lix

2007-15008

PROYECTO 1:
OBJETIVOS:
Realizar un compilador de un lenguaje parecido al php para generar
un archivo html.
Aplicar lo aprendido en clases y laboratorio sobre tipos de
gramaticas y como llegar a una gramatica sin ambigedad.
Utilizar las herramientas jlex y cup.
Comenzar a utilizar el sistema operativo linux.

DESCRIPCIN DEL PROYECTO:

Realizar un anlisis lxico y sintctico al archivo de entrada.

Generar un jtable con la descripcin de las variable

Generar un archivo con los errores encontrados

Generar el archivo de entrada sin errores

SIMBOLOS DEL LENGUAJE

1) ;
2) :
3) ,
4) +
5)
6) *
7) /
8) <
9) >
10) =
11)
12) [
13) ]
14)
15) %
16) (
17) )
18)

EXPRESIONES REGULARES

1) numero = ([0-9])+
2) comi = \"
3) id = ([a-zA-Z])(([a-zA-Z]|[0-9])*)
4) real=({numero})+({punto})({numero})+
5) entero=({numero})+
6) char=("\"")([a-zA-Z])("\"")
7) comentario="/*"[^*]*"*/"
8) comentario2="//"[^\n]*
9) array=("[")([0-9]|[a-zA-Z])+("]")
10) string=("\"")([^\"]*)+("\"")

PALABRAS RESERVADAS

1) integer
2) real
3) bolean
4) var
5) and
6) char
7) or
8) and
9) trae
10) false
11) if
12) then
13) begin
14) else
15) end_if
16) case
17) echo
18) break
19) default
20) end_case
21) for
22) end_for

23) while

24) end_while

25) table

26) begin_fila

27) begin_columna

28) end_tabla

29) fin_fila

30) fin_columna

31) array

32) to

terminal
DOSPUNTOS,COMA,MENOS,MAS,ASTERISCO,MENORQ,IGUAL,MAYORQ,
ADMIRACION;
terminal
CORCHETEA,DIVISION,CORCHETEC,PUNTOYCOMA,COMILLA,ABRIRARCHIVO,FIN
ARCHIVO;
terminal
PARENTESISA, PARENTESISC, ENTERO, REAL, COMENTARIO, CHAR, ID,
ARRAY, INTEGER;
terminal
PALABRAREAL,BOOLEAN,VAR,PALABRACHAR,AND,OR,TRUE,FALSE,IF,THEN,BEGIN
,ELSE;
terminal
ENDIF,CASE,ECHO,BREAK,DEFAULT,ENDCASE,FOR,ENDFOR,WHILE,ENDWHILE,
TABLA;
terminal
BEGINFILA,BEGINCOLUMNA,ENDTABLA,ENDFILA,ENDCOLUMNA,PALABRAARRAY,
TO,STRING;

non terminal
inicio,tipoVar,tipoVar2,asignacionI,evaluacionExpresiones,s5,s7,s8,s9,s11;
non terminal
asignacionC,asignacionR,asignacionB,valoresB,declaracionVariables;
non terminal
evaluaciones, evaluacionGenerica, operadores1,
operadoresBooleanos;
non terminal
operadorConcatenacion,operadorMultiplicacion,
operadoresAritmeticos;
non terminal
operadorAgrupacion, operadores2, operandos, operandosNumericos,
masOperaciones2;

non terminal
operandos1, operandos2, operandosM, masOperaciones,
masOperaciones3;
non terminal
operandos5, masOperaciones4, operandosNumericosC,masMenos, for,
evaluacionExpresiones2;
non terminal
asignacion, array, echo,if, condicion, else, valoresIf, while, yy, igual;
non terminal
comparadores, case, expresion, tipoDato, elecciones, default;
non Terminal
tabla, ifTabla, forTabla, whileTabla, caseTabla, datos3, creacionFila,
creacionColumna;
non Terminal
expre, eleccionesTabla, defaultTabla, elseTabla,filasColumnas;

inicio ::= ABRIRARCHIVO evaluacionExpresiones FINARCHIVO


;

evaluacionExpresiones ::=evaluacionExpresiones asignacion


|evaluacionExpresiones ID evaluaciones
| evaluacionExpresiones for
|evaluacionExpresiones echo
|evaluacionExpresiones if
|evaluacionExpresiones while
|evaluacionExpresiones case
|evaluacionExpresiones tabla
|tabla
|asignacion
|ID evaluaciones
|for
|echo
|if
|while
|case
;

asignacion ::= VAR tipoVar2


;
tipoVar2 ::= INTEGER ID asignacionI
| PALABRACHAR ID asignacionC
|PALABRAREAL ID asignacionR
| BOOLEAN ID asignacion ;

asignacionI ::= PUNTOYCOMA


|DOSPUNTOS IGUAL masMenos ENTERO PUNTOYCOMA
| ARRAY PUNTOYCOMA
;
masMenos ::= MAS
|MENOS
|
;

asignacionB ::= PUNTOYCOMA


|DOSPUNTOS IGUAL valoresB PUNTOYCOMA
;

asignacionC ::= PUNTOYCOMA


|ARRAY PUNTOYCOMA
;

asignacionR ::= PUNTOYCOMA


|DOSPUNTOS IGUAL masMenos REAL PUNTOYCOMA
;

valoresB ::= FALSE


|TRUE
;

evaluaciones ::= DOSPUNTOS IGUAL evaluacionGenerica PUNTOYCOMA


| ARRAY DOSPUNTOS IGUAL array PUNTOYCOMA
;
array ::= CHAR
| ID
|masMenos ENTERO
;
evaluacionGenerica ::= ID operadores1
|masMenos ENTERO operadores1
|masMenos REAL operadores1
| PARENTESISA operandosNumericos masOperaciones
|CHAR
;

operandosNumericos ::=ID
|REAL
|ENTERO

masOperaciones ::= masOperaciones3


|PARENTESISC masOperaciones4

;
masOperaciones3 ::= MAS operandosNumericos masOperaciones
|MENOS operandosNumericos masOperaciones
|ASTERISCO operandosNumericos masOperaciones

|DIVISION operandosNumericos masOperaciones


|AND operandosNumericos masOperaciones
|OR operandosNumericos masOperaciones
|MAYORQ operandosNumericos masOperaciones
|MENORQ operandosNumericos masOperaciones
;
operandosNumericosC ::= ID masOperaciones4
|REAL masOperaciones4
|ENTERO masOperaciones4
|PARENTESISA operandosNumericos masOperaciones
;
masOperaciones4 ::= MAS operandosNumericosC
|MENOS operandosNumericosC
|ASTERISCO operandosNumericosC
|DIVISION operandosNumericosC
|AND operandosNumericosC
|OR operandosNumericosC
|MAYORQ operandosNumericosC
|MENORQ operandosNumericosC
|
;

operadores1 ::= masOperaciones4


;
for::= FOR ID DOSPUNTOS IGUAL ENTERO TO ENTERO BEGIN
evaluacionExpresiones ENDFOR
;

echo ::= ECHO s8 PUNTOYCOMA


;
s8 ::= ID s7 s5
| STRING s5
;
s7 ::= ARRAY
|
;
s5 ::= COMA s8
|MAS s8
|
;

if ::=IF PARENTESISA condicion PARENTESISC THEN BEGIN evaluacionExpresiones


else ENDIF
;

else ::= ELSE evaluacionExpresiones


|
;

condicion ::= evaluacionGenerica IGUAL IGUAL valoresIf


;

valoresIf ::= valoresB


|ENTERO
|REAL
|ID

while ::= WHILE yy comparadores yy BEGIN evaluacionExpresiones ENDWHILE


;
yy ::= operandosNumericos
;
comparadores ::= MAYORQ igual
|MENORQ igual
|
;
igual ::= IGUAL
|
;
case ::= CASE expresion BEGIN elecciones ENDCASE
;
expresion ::= evaluacionGenerica
;

elecciones ::= elecciones tipoDato DOSPUNTOS evaluacionExpresiones BREAK


PUNTOYCOMA
| tipoDato DOSPUNTOS evaluacionExpresiones BREAK PUNTOYCOMA
|elecciones default
|default
;
tipoDato ::= masMenos ENTERO
|CHAR
;
default ::= DEFAULT DOSPUNTOS evaluacionExpresiones
;

tabla ::= TABLA filasColumnas ENDTABLA


;
filasColumnas ::=forTabla
|ifTabla
|caseTabla
|whileTabla
|creacionFila

;
forTabla ::= FOR ID DOSPUNTOS IGUAL ENTERO TO ENTERO BEGIN expre
ENDFOR
;
expre ::= creacionFila
| creacionColumna
;
creacionFila ::= BEGINFILA forTabla ENDFILA
;
creacionColumna ::= BEGINCOLUMNA echo ENDCOLUMNA
;

ifTabla ::=IF PARENTESISA condicion PARENTESISC THEN BEGIN expre elseTabla


ENDIF
;

elseTabla ::= ELSE expre


|
;

whileTabla ::= WHILE yy comparadores yy BEGIN expre ENDWHILE


;
caseTabla ::= CASE expresion BEGIN eleccionesTabla ENDCASE
;
defaultTabla ::= DEFAULT DOSPUNTOS expre
;

eleccionesTabla ::= elecciones tipoDato DOSPUNTOS expre BREAK


PUNTOYCOMA
| tipoDato DOSPUNTOS expre BREAK PUNTOYCOMA
|elecciones defaultTabla
|defaultTabla
;

You might also like