Professional Documents
Culture Documents
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
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