Manual Lenguajes Formales

17
USAC UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA COMPILADORES 1 PROYECTO 1 Sergio Fernando Espantzay Lix 2007-15008

description

Programación

Transcript of Manual Lenguajes Formales

  • 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

    ;