Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ejercicio 1:
Queremos generar listas enumeradas en HTML. Para ello, tenemos las siguientes palabras reservadas: la pareja
TKN_OL y TKN_END_OL que indican el inicio y final de una lista y la pareja TKN_LI y TKN_END_LI
que encierran un tem. Disear una gramtica LL(1) que genere dicho lenguaje. La gramtica debe cumplir
que: i) En el fichero de datos entrada debe haber al menos una lista; ii) Pueden existir listas dentro de listas; iii)
No pueden existir listas vacas, sin tems u otras listas; iv) Detrs o delante de una lista pueden ir un tem u otra
lista y v) A un tem le puede seguir otro tem o una lista.
Las expresiones regulares que definen los componentes lxicos de nuestro lenguaje son:
TKN_OL: <OL>
TKN_END_OL: </OL>
TKN_LI: <LI>
TKN_END_LI: </LI>
TKN_ID: [a-zA-Z]+
TKN_BLANCO: [\n\t ]
<OL>
<LI> este es el primer tem </LI>
<OL>
<LI> un tem de otra lista </LI>
<LI> otro tem de otra lista </LI>
</OL>
<LI> ms tems </LI>
</OL>
Ejercicio 2:
Disear una gramtica que genere sentencias de llamadas a funciones con un nmero indeterminado de
argumentos. Asumid que: i) Puede existir anidamiento en llamadas a funciones, es decir, un argumento puede
ser lo que devuelva la llamada a una funcin; ii) Pueden existir funciones sin argumentos; iii) Slo tenemos la
operacin asignacin.
Ejercicio 3:
Disea una gramtica que permita generar sentencias if_else anidadas.
Ejercicio 4:
Disea una gramtica que permita generar declaraciones en C++ de clases dentro de clases.
Ejercicios Adicionales Tema 1 y 2 2 de octubre de 2012
typedef struct {
TokenType tok;
strig lex;
} TokenRecord;
TokenRecord getToken(void) {
char c;
StateType estado = INICIO;
TokenRecord token;
{
estado = ACEPTAR;
token.tok = TKN_ERROR;
}
break;
case MENOR:
if ( c == '>')
{
estado = ACEPTAR;
token.tok = TKN_DIST;
}
else if ( c == '=')
{
estado = ACEPTAR;
token.tok = TKN_MENORIG;
}
else
{
estado = ACEPTAR;
token.tok = TKN_MENOR;
unGetChar();
}
break;
case IGUAL:
if ( c == '=')
{
estado = ACEPTAR;
token.tok = TKN_IG;
}
else
{
estado = ACEPTAR;
token.tok = TKN_ERROR;
}
break;
case MAYOR:
if ( c == '=')
{
estado = ACEPTAR;
token.tok = TKN_MAYORIG;
}
else
{
estado = ACEPTAR;
token.tok = TKN_MAYOR;
unGetChar();
}
break;
} //end_switch
} // end_while
return token;
} // end_function
Ejercicios Adicionales Tema 1 y 2 2 de octubre de 2012