%{ %} %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