Sunteți pe pagina 1din 4

Proyecto Compiladores

Profesor Carlos Gmez Pantoja


El proyecto del curso consiste en desarrollar algunas etapas de un compilador. El lenguaje de programacin estudiado ser un subconjunto del lenguaje Pascal. La primer etapa consiste en desarrollar en anlisis lxico con Flex y el anlisis sintctico con Yacc/Bison. La fecha de entrega ser el 15 de Noviembre a las 23:59. La entrega debe ser por aula virtual y por correo electrnico (la entrega por correo electrnico es obligatoria, ya que en aula virtual puede haber algn problema). Las dudas y consultas de los alumnos (y sus respuestas) sern enviadas a la lista del curso, as no se tendr duplicidad de consultas. Las pruebas y las salidas deseadas, sern enviadas por correo en el transcurso de la semana. La idea de estas pruebas es que prueben sus proyectos antes de la entrega.

Convenciones
En general, si algn smbolo aparece con maysculas es un smbolo no terminal. Si es con minsculas y/o algn separador (";", ",", "[", "]", "(", ")", etc.) es smbolo terminal. Las siguientes convenciones deben ser aplicadas en el lenguaje: 1. Letra: a | b | c | ... | z | A | B | ... | Z 2. Dgito: 0 | 1 | ... | 9 3. Signo: - | + 4. Identificador: Letra [ Letra | Dgito ]* 5. Entero sin signo: Nmero [ Nmero ]* 6. Entero con signo: Signo Nmero [ Nmero ]*

Gramtica
La gramtica del lenguaje de programacin es el siguiente (con PROGRAMA como smbolo inicial): PROGRAMA BLOQUE program IDENTIFICADOR; BLOQUE. DEF_CONSTANTES DEF_TIPOS DEF_VARIABLES DECL_FUNCS_PROCS SENT_COMPUESTA const DEF_CONSTANTE {; DEF_CONSTANTE }; |

DEF_CONSTANTES

DEF_CONSTANTE CONSTANTE

IDENTIFICADOR = CONSTANTE ENTERO-CON-SIGNO | ENTERO-SIN-SIGNO | IDENTIFICADOR SIGNO IDENTIFICADOR type DEF_TIPO {; DEF_TIPO }; | IDENTIFICADOR = TIPO TIPO_SIMPLE | array[ TIPO_SIMPLE ] of TIPO SIMPLE TIPO_SUBRANGO | IDENTIFICADOR CONSTANTE .. CONSTANTE

DEF_TIPOS

DEF_TIPO TIPO

TIPO_SIMPLE

TIPO_SUBRANGO

DEF_VARIABLES

var DECL_VARIABLE {; DECL_VARIABLE }; | IDENTIFICADOR {, IDENTIFICADOR } : TIPO IDENTIFICADOR | VAR_COMPONENTE IDENTIFICADOR [ EXPRESION ]

DECL_VARIABLE VARIABLE

VAR_COMPONENTE

DECL_FUNCS_PROCS

{ DECL_PROC | DECL_FUNC } ENC_PROC BLOQUE

DECL_PROC

ENC_PROC procedure IDENTIFICADOR; | procedure IDENTIFICADOR ( PARAMS_FORMALES {; PARAMS_FORMALES } ); PARAMS_FORMALES GRUPO_PARAMS | var GRUPO_PARAMS

GRUPO_PARAMS

IDENTIFICADOR {, IDENTIFICADOR } : IDENTIFICADOR

DECL_FUNC

ENC_FUNC BLOQUE

ENC_FUNC function IDENTIFICADOR : IDENTIFICADOR; | function IDENTIFICADOR ( PARAMS_FORMALES {; PARAMS_FORMALES } ): IDENTIFICADOR

SENTENCIA

SENT_SIMPLE | SENT_ESTRUCT SENT_ASIGNACION | LLAM_PROC | VARIABLE := EXPRESION SENT_COMPUESTA | SENT_CONDICIONAL | SENT_WHILE SENT_IF | SENT_CASE begin SENTENCIA {; SENTENCIA} end if EXPRESION then SENTENCIA [ PARTE_ELSE ] else SENTENCIA

SENT_SIMPLE

SENT_ASIGNACION SENT_ESTRUCT

SENT_CONDICIONAL

SENT_COMPUESTA SENT_IF PARTE_ELSE SENT_CASE

case EXPRESION of LISTA_CASE {; LISTA_CASE } end ET_CASE : SENTENCIA | CONSTANTE {, CONSTANTE } while EXPRESION do SENTENCIA EXP_SIMPLE | EXP_SIMPLE OP_RELACIONAL EXP_SIMPLE = | <> |< |> | <=

LISTA_CASE

ET_CASE SENT_WHILE EXPRESION

OP_RELACIONAL

| >= EXP_SIMPLE TERMINO | EXP_SIMPLE OP_SUMADOR TERMINO SIGNO TERMINO + || or FACTOR | TERMINO OP_MULTIPL FACTOR * | div | and VARIABLE | CONST_NO_SIGNADA | LLAM_FUNC | ( EXPRESION ) | not FACTOR ENTERO_SIN_SIGNO | IDENTIFICADOR

OP_SUMADOR

TERMINO

OP_MULTIPL

FACTOR

CONST_NO_SIGNADA

LLAM_FUNC

IDENTIFICADOR | IDENTIFICADOR ( PAR_ACTUAL {, PAR_ACTUAL } ) IDENTIFICADOR | IDENTIFICADOR ( PAR_ACTUAL {, PAR_ACTUAL } ) EXPRESION | VARIABLE

LLAM_PROC

PAR_ACTUAL

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