{ %} %token t_palabra %token t_numero %token t_guion_palabra

Anuncio
%{
%}
%token t_palabra
%token t_numero
%token t_guion_palabra
%token t_almohadilla
%token t_arroba
%token t_punto
%token t_retorno
%token t_abrir_interr
%token t_cerrar_interr
%token t_abrir_admirac
%token t_super_ampersand
%token t_super_dolar
%token t_lista1
%token t_subrayado
%token t_mas
%token t_categoria
%token t_lista2
%token t_dos_puntos
%token t_igual
%token t_tanto_por_ciento
%token t_barra
%token t_espacios
%token t_asterisco
%%
FICHERO:
REGLAS
RETORNOS REGLAS
;
RETORNOS: t_retorno RETORNOS | t_retorno;
REGLAS: REGLA RETORNOS REGLAS
| REGLA RETORNOS
| REGLA;
REGLA: t_abrir_interr t_numero
| t_cerrar_interr t_numero
| t_numero
| t_almohadilla t_numero;
REGLA: ELEMENTOS;
1
ELEMENTOS: ELEMENTO t_espacios ELEMENTOS
| ELEMENTO;
ELEMENTO: TERMINACION1
| TERMINACIONPUNTO
| TERMINACIONASTERISCODOSPUNTOS
| TERMINACIONBARRA
| TERMINACIONDOSPUNTOS
| TERMINACIONIGUALTANTOPORCIENTO;
TERMINACIONIGUALTANTOPORCIENTO: t_igual TERMINACION1
| t_igual TERMINACIONPUNTO
| t_igual TERMINACIONDOSPUNTOS
| t_igual TERMINACIONASTERISCODOSPUNTOS
;
TERMINACIONIGUALTANTOPORCIENTO: t_tanto_por_ciento
TERMINACION1
| t_tanto_por_ciento TERMINACIONPUNTO
| t_tanto_por_ciento TERMINACIONDOSPUNTOS
| t_tanto_por_ciento TERMINACIONASTERISCODOSPUNTOS;
TERMINACIONBARRA: t_barra TERMINACION1
| t_barra TERMINACIONPUNTO
| t_barra TERMINACIONIGUALTANTOPORCIENTO
| t_barra TERMINACIONDOSPUNTOS
| t_barra TERMINACIONASTERISCODOSPUNTOS;
TERMINACIONPUNTO: t_punto TERMINACION1;
TERMINACION1: t_guion_palabra;
TERMINACION1: t_guion_palabra t_subrayado t_lista1;
TERMINACION1: t_guion_palabra t_subrayado t_lista2;
TERMINACION1: t_almohadilla t_palabra;
TERMINACION1: t_almohadilla t_palabra t_subrayado t_lista1;
TERMINACION1: t_almohadilla t_palabra t_subrayado t_lista2;
TERMINACION1: t_arroba t_palabra;
TERMINACION1: t_palabra;
2
TERMINACION1: t_abrir_interr t_palabra;
TERMINACION1: t_cerrar_interr t_palabra;
TERMINACION1: t_abrir_admirac t_categoria;
TERMINACION1: t_abrir_admirac NUMERO;
TERMINACION1: t_abrir_admirac t_categoria t_subrayado t_lista1;
TERMINACION1: t_abrir_admirac NUMERO t_subrayado t_lista1;
TERMINACION1: t_abrir_admirac t_categoria t_subrayado t_lista2;
TERMINACION1: t_abrir_admirac NUMERO t_subrayado t_lista2;
TERMINACION1: t_super_ampersand;
TERMINACION1: t_super_dolar;
TERMINACION1: t_lista2;
LISTA2: t_lista2 t_subrayado
LISTA1: t_lista1 t_subrayado
TERMINACION1: t_lista1;
TERMINACION1: t_asterisco t_lista1;
TERMINACION1: LISTA2 t_lista1;
TERMINACION1: LISTA1 t_lista2;
TERMINACION1: LISTA1 t_lista1;
TERMINACION1: LISTA2 t_lista2;
NUMERO: t_numero
{
long numerolo;
if (sscanf(ultima_palabra,"%ld",&numerolo)!=1)
assert(0);
switch (numerolo)
{
case 10:
case 11:
case 12:
3
case 13:
case 14:
case 20:
case 21:
case 22:
case 30:
case 40:
case 50:
case 51:
case 52:
case 53:
case 54:
case 60:
case 70:
case 80:
case 90:
case 91:
break;
default:
assert(0);
}
}
;
TERMINACION1: t_mas t_categoria
| t_mas t_categoria t_subrayado NUMERO
| t_mas NUMERO
| t_mas t_categoria t_subrayado t_lista1
| t_mas t_categoria t_subrayado t_lista2
| t_mas NUMERO t_subrayado t_lista1
| t_mas NUMERO t_subrayado t_lista2
;
TERMINACIONASTERISCODOSPUNTOS: t_asterisco
TERMINACIONDOSPUNTOS;
TERMINACIONDOSPUNTOS: t_dos_puntos
t_lista2
t_lista2
t_lista2
;
%%
4
%{
%}
numero [0-9]+
palabra [a-zA-Z]|[a-zA-Z][a-zA-Z0-9_\-]*[a-zA-Z0-9]
signo [,:;?¿!¡]
espacios [ \t]+
%%
"nombre"
"adjetivo"
"adverbio"
"verbo"
"interjeccion"
"conjuncion"
"preposicion"
"articulo"
"pronombre"
"NOMBRE"
"ADJETIVO"
"ADVERBIO"
"VERBO"
"INTERJECCION"
"CONJUNCION"
"PREPOSICION"
"ARTICULO"
"PRONOMBRE"
{
if (!linea_coment)
return Actualiza(TOKEN_categoria);
else
break;
}
"\""
{
linea_coment=1;
break;
}
"\n\""
"\r\""
"\n"{espacios}"\""
"\r"{espacios}"\""
{
linea_coment=1;
5
yy_numero_de_lineas_leidas++;
return Actualiza(TOKEN_retorno);
break;
}
"&.+"
"&.-"
"&"{signo}
{
if (!linea_coment)
return Actualiza(TOKEN_super_ampersand);
else
break;
}
"$.+"
"$.-"
"$"{signo}
{
if (!linea_coment)
return Actualiza(TOKEN_super_dolar);
else
break;
}
"+"
{
if (!linea_coment)
return Actualiza(TOKEN_mas);
else
break;
}
"*"
{
if (!linea_coment)
return Actualiza(TOKEN_asterisco);
else
break;
}
"|"
{
if (!linea_coment)
return Actualiza(TOKEN_barra);
else
break;
}
6
"="
{
if (!linea_coment)
return Actualiza(TOKEN_igual);
else
break;
}
"%"
{
if (!linea_coment)
return Actualiza(TOKEN_tanto_por_ciento);
else
break;
}
":"
{
if (!linea_coment)
return Actualiza(TOKEN_dos_puntos);
else
break;
}
{espacios}"\n"
{espacios}"\n\r"
{espacios}"\r\n"
{espacios}"\r"
{
yy_numero_de_lineas_leidas++;
if (!linea_coment)
{
linea_coment=0;
return Actualiza(TOKEN_retorno);
}
}
{espacios}
{
if (!linea_coment)
return Actualiza(TOKEN_espacios);
else
break;
}
{numero}
{
if (!linea_coment)
return Actualiza(TOKEN_numero);
else
7
break;
}
"["{espacios}{palabra}"]"
"["{espacios}{palabra}{espacios}"]"
"["{palabra}{espacios}"]"
"["{palabra}"]"
{
if (!linea_coment)
{
ExtraeNombreFichero(ultimoFichero);
AnyadeFicheroALista(ultimoFichero);
return Actualiza(TOKEN_lista2);
}
else
break;
}
"<"{espacios}{palabra}">"
"<"{espacios}{palabra}{espacios}">"
"<"{palabra}{espacios}">"
"<"{palabra}">"
{
if (!linea_coment)
{
ExtraeNombreFichero(ultimoFichero);
AnyadeFicheroALista(ultimoFichero);
return Actualiza(TOKEN_lista1);
}
else
break;
}
"-"{palabra}
{
if (!linea_coment)
return Actualiza(TOKEN_guion_palabra);
else
break;
}
{palabra}
{
if (!linea_coment)
return Actualiza(TOKEN_palabra);
else
break;
}
"_"
8
{
if (!linea_coment)
return Actualiza(TOKEN_subrayado);
else
break;
}
"."
{
if (!linea_coment)
return Actualiza(TOKEN_punto);
else
break;
}
"# "
{
if (!linea_coment)
return Actualiza(TOKEN_almohadilla);
else
break;
}
"@"
{
if (!linea_coment)
return Actualiza(TOKEN_arroba);
else
break;
}
"?"
{
if (!linea_coment)
return Actualiza(TOKEN_cerrar_interr);
else
break;
}
"+"
{
if (!linea_coment)
return Actualiza(TOKEN_abrir_interr);
else
break;
}
"!"
"í"
{
if (!linea_coment)
return Actualiza(TOKEN_abrir_admirac);
else
9
break;
}
"\n\r"
"\r\n"
"\r"
"\n"
{espacios}"\n\r"
{espacios}"\r\n"
{espacios}"\r"
{espacios}"\n"
{
yy_numero_de_lineas_leidas++;
if (!linea_coment)
{
linea_coment=0;
return Actualiza(TOKEN_retorno);
}
else
{
linea_coment=0;
break;
}
}
"Á"
"É"
"Í"
"Ó"
"Ú"
"ü"
"á"
"é"
"í"
"ó"
"ú"
"ñ"
"ª"
"º"
"<"
">"
"+"
"-"
"?"
"+"
10
","
";"
"("
")"
"'"
"/"
"\t"
"&"
{
if (linea_coment)
{
break;
}
else
{
yyerror2();
break;
}
}
"ß"
"Ú"
"Ý"
"¾"
"·"
"±"
"-"
"+"
"-"
"Ë"
"+"
"Ð"
{
if (linea_coment)
{
break;
}
else
{
return Actualiza(TOKEN_palabra);
}
}
À
11
{
yyerror2();
break;
}
%%
12
Descargar