%{
/* Este analizador lee de un fichero una serie de nombres (compuestos de letras
mayusculas y minúsculas) y los va a poner sobre
el fichero de salida en sentido inverso*/
#include <string.h> /* MIRAR DONDE PONEMOS LAS LIBRERIAS QUE NOS HACE FALTA*/
int entero = 0;
float real = 0;
int contador = 0;
char c;
int i;
%}
INTEGER [0-9]+|[-][0-9]+
FLOAT [0-9]+[.][0-9]+|[-][0-9]+[.][0-9]+
OPERACION ("*"|"+"|"-"|"/")
ESPECIAL ("ª"|"º"|"\"|"!"|"|"|"""|"#"|"$"|"%"|"&"|"¬"|"/"|"("|")"|"="|"?"|"'"|"¿"|"¡"|"@"|"^"|"`"|"["|"*"|"]"|"¨"|"´"|"{"|"ç"|"}"|";"|","|":"|"."|"_"|"<"|">")
%%
[A-Z] {
c = yytext[0];
if (c != 'Z') {
c++;
}
else {
c = 'A';
}
fprintf(yyout,"%c",c);
}
{INTEGER} {
entero=atoi(yytext);
entero=entero*2;
fprintf(yyout,"%d",entero);
}
{FLOAT} {
real=atof(yytext);
real=real+4;
fprintf(yyout,"%f",real);
}
{INTEGER}{OPERACION}{INTEGER}|{FLOAT}{OPERACION}{FLOAT} {
printf("ERROR: La operacion no ha sido encriptada\n");
fprintf(yyout,"%s",yytext);
}
[a-z] {
c = yytext[0];
if (c != 'z') {
c++;
}
else {
c = 'a';
}
fprintf(yyout,"%c",c);
}
[a-z][a-z] {
c = yytext[0];
if (c != 'z') {
c++;
}
else {
c = 'a';
}
fprintf(yyout,"%c",c);
c = yytext[1];
fprintf(yyout,"%c",c);
}
{ESPECIAL}[A-Za-z]+{ESPECIAL} {
contador = yyleng;
char a = yytext[0];
char b = yytext[contador - 1];
if (a == b) {
c = ':';
fprintf(yyout,"%c",c);
}
else {
fprintf(yyout,"%c",a);
}
entero = atoi(&yytext[1]);
entero++;
fprintf(yyout, "%d", entero);
for (i = 2; i < contador - 2; i++) {
fprintf(yyout, "%c", yytext[i]);
}
entero = atoi(&yytext[contador - 2]);
entero++;
fprintf(yyout, "%d", entero);
if (a == b) {
c = ':';
fprintf(yyout,"%c",c);
}
else {
fprintf(yyout,"%c",a);
}
}
%%
yywrap(){
}
main(int argc,char *argv[]){
if (argc!=3){
printf("LOS PARAMETROS SON:");
printf("\n1.-Dime el fichero de entrada");
printf("\n2.-Dime el fichero de salida");
exit(1);
}
yyin = fopen(argv[1],"rb");
if (yyin==NULL){
printf("\n No puedo abrir %s",argv[1]);
exit(1);
}
yyout = fopen(argv[2],"wb");
if (yyout==NULL){
printf("\n No puedo crear %s",argv[2]);
exit(1);
}
yylex();
}