You are on page 1of 2

Trabajo 3

Compiladores

En grupos de trabajo realizar programas en cualquier lenguaje de programación con interfaz gráfica para probar las
producciones de los lenguajes representados mediante gramáticas utilizando tablas de símbolos, lexemas y tokens.

Para la siguiente gramática realizar un programa que lea o ingrese un archivo de texto para que elimine comentarios,
espacios en blanco y reconozca diferentes versiones de código.
1. Los comentarios se definen de dos maneras, para líneas se utiliza el símbolo “%” y para bloque de líneas de
código se utiliza “|%......%|)”.
<PROGRAMA> ::= proceso <IDENTIFICADOR> inicioproceso <INSTRUCCIONES> finproceso
<INSTRUCCIONES> ::= <DECLARACIONES> |<SI>
<DECLARACIONES>:= definir <DECLARACION> como <TIPO> ;
<DECLARACION>:= <IDENTIFICADOR>| <IDENTIFICADOR>,<DECLARACION>
<SI> := si <CONDICION> entonces <OPERACIÓN>; sino <OPERACIÓN>; finsi
<CONDICION> := <IDENTIFICADOR> <COMPARADOR> <DIGITO>
<COMPARADOR> := < | > | <= | >= | %=
<OPERACIÓN> := <IDENTIFICADOR> = <DIGITO> | <IDENTIFICADOR> = <IDENTIFICADOR> <RESTO_OPERACION>
<RESTO_OPERACION> ::= + <OPERACIÓN>| - <OPERACIÓN>
<TIPO> ::= entero | real | cadena
<IDENTIFICADOR> ::= <LETRA> | <LETRA> <RESTO_IDENT >
<REST0_IDENT> ::= <LETRA> <RESTO_IDENT> | <DIGITO> <RESTO_IDENT> | <LETRA> | <DIGITO>
<LETRA> ::= a | b |c | … | z | A | B |C |…| Z
<DIGITO> ::= 0 | 1 | 2 | … | 9
<TEXTO> := <LETRA> <TEXTO>
2. Los comentarios se definen de dos maneras, para líneas se utiliza el símbolo “!” y para bloque de líneas de
código se utiliza “?!.........!?”.
<PROGRAMA> -> programa <IDENTIFICADOR> inicio <CUERPO> fin
<CUERPO> -> <VARIABLES><CICLO>
<VARIABLES> - > definir <IDENTIFICADOR> como <TIPO> ; <VARIABLES>
<CICLO> -> para [ <CONTADOR> = <NUMEROS>;<CONTADOR> <COMPARADOR> <NUMEROS>; <CONTADOR> ++ ]
iniciopara <OPERACIONES> finpara
<COMPARADOR> : > | <= | >= | < | ?=
<OPERACIONES> := <IDENTIFICADOR> = <CONTADOR> <SIGNO> <DIGITO> ; <OPERACIONES>
<SIGNO> -> + | - | * | /
<TIPO> ::= entero | real | cadena
<CONTADOR> -> <LETRA> <DIGITO>
<IDENTIFICADOR> ::= <LETRA> | <LETRA> <RESTO_IDENT >
<REST0_IDENT> ::= <LETRA> <RESTO_IDENT> | <DIGITO> <RESTO_IDENT> <LETRA> | <DIGITO>
<LETRA> ::= a | b |c | … | z
<NUMEROS> -> <DIGITO> | <DIGITO><NUMEROS>
<DIGITO> ::= 0 | 1 | 2 | … | 9
3. Los comentarios se definen de dos maneras, para líneas se utiliza el símbolo “{” y para bloque de líneas de
código se utiliza “{%.........%}”.
<PROGRAMA> -> codigo <IDENTIFICADOR> inicio <CUERPO> fin
<CUERPO> -> <VARIABLES> <SENTENCIA>
<VARIABLES> -> variant <CONTADOR> $ <VARIABLES>
<SENTENCIA> -> si “(“<CONDICION>”)” entonces <OPERACIONES> sino <OPERACIONES> $
<OPERACIONES> -> (<SUMA> | <RESTA>) <OPERACIONES>
<SUMA> -> sumar “(“<BYTE>,<REAL>”)” $
<RESTA> -> restar “(“<REAL>,<DIGITO>”)” $
<CONDICION> -> true | false
<BYTE> -> <DIGITO><DIGITO>
<REAL> -> <BYTE>.<BYTE>
<CONTADOR> -> <LETRA> <DIGITO> <LETRA>
<IDENTIFICADOR> ::= <LETRA> | <LETRA> <RESTO_IDENT >
<REST0_IDENT> ::= <LETRA> <RESTO_IDENT> | <DIGITO> <RESTO_IDENT> <LETRA> | <DIGITO>
<LETRA> ::= a | b |c | … | z
<DIGITO> ::= 0 | 1 | 2 | … | 9

Ing. Marco R. Pusdá MSc. Docente


Trabajo 3
Compiladores

4. Los comentarios se definen de dos maneras, para líneas se utiliza el símbolo “/” y para bloque de líneas de
código se utiliza “/$.........$/”.
<SENT> := <SEL> | <ASIG>
<SEL> := if <COND> then <SENT> else <SENT>
<COND> := <EXP> <COMP> <EXP>
<COMP> := < | > | <= | >= | == | <>
<ASIG> := <ID “=” <EXP>
<EXP> := (<EXP> + <TERM>) | (<EXP> - <TERM>) | <TERM>
<TERM> := (<TERM> * <FACT>) | (<TERM> / <FACT>) | <FACT>
<FACT> := <ID> | <CTE>
<ID> := <LET> | <LET><RID>
<RID> := (<LET> | <NUM>) | (<LET> | <NUM>) <RID>
<CTE> := <LET> <NUM>
<LET> := [a…z]
<NUM> := [0…9]
5. Los comentarios se definen de dos maneras, para líneas se utiliza el símbolo “<” y para bloque de líneas de
código se utiliza “<*.........*>”.
<PROGRAMA> := codigo <ID> inicio <SENT> fin
<SENT> := (<LEC> | <ESC> | <OPE>) ; <SENT>
<LEC> := leer “(“<TEXT>”)”,<ID>
<ESC> := escribir “(“<TEXT>”)”,<ID>
<OPE> := <ID> “=” <BYTE> <SIG> <ID>
<BYTE> := <NUM><NUM>
<SIG> := + | * | - | / | %
<ID> := <LET> | <LET><RID>
<RID> := (<LET> | <NUM>) | (<LET> | <NUM>) <RID>
<TEXT> := <LET> | <LET> <TEXT>
<LET> := [a…z]
<NUM> := [0…9]
Calificación

Detalle Puntaje
Tabla de símbolos 2
Búsqueda en la tabla de símbolos 2
Eliminación comentarios 2
Omisión espacios y saltos de línea 2
Listado de lexemas, tokens y líneas de código 2

Ing. Marco R. Pusdá MSc. Docente

You might also like