1
« en: Viernes 11 de Junio de 2010, 19:26 »
estoy realizando un proyecto con flex y bison en debian, quisiera saber si me pueden dar una ayudita, el caso es el siguiente: tengo mi analizador lexico que debe verificar una direccion web que está guardada en un archivo de texto, el problema es que no se que me falta por escribirle a mi analizador para que funcione, espero me den una ayudita. colocaré el codigo de lex y el codigo de bison.
CODIGO DE LEX
%option noyywrap
%{
#include
#include
#include
%}
/******************************DEFINICION DE TOKENS******************************************/
HTTP (http)
FTP (ftp)
HTTPS (https)
LDAP (ldap)
DIAG ("/")
DOSPUNTOS (":")
PUNTO (".")
LETRA [A-Za-z]
DIGITO [0-9]
INTERROGA ("?")
IGUAL ("=")
GUION_MAY ("_")
GUION_MEN ("-")
PAREN_ABIERTO ("(")
PAREN_CERRADO (")")
AMPERSON ("&")
ASTERISCO ("*")
MAS ("+")
CADENA ({LETRA}|{DIGITO}|{GUION_MAY}|{GUION_MEN})+
DOMINIO {CADENA}({PUNTO}{CADENA})*({DOSPUNTOS}{DIGITO}+)*(({DIAG}({CADENA}|{DIGITO}|{PUNTO}|{INTERROGA}|{IGUAL}|{GUION_MAY}|{GUION_MEN}|{PAREN_ABIERTO}|{PAREN_CERRADO}|{AMPERSON}|{ASTERISCO}|{MAS})*)*
PROTOCOLO {HTTP}|{FTP}|{HTTPS}|{LDAP}
URL {PROTOCOLO}{DOSPUNTOS}{DIAG}{DIAG}{DOMINIO}
%%
URL {printf("%s es una url valida",yytext);}
. {printf("%s no es una url valida",yytext);}
%%
int main(int argc, char *argv[])
{
system("clear");
yyin = fopen(argv[1],"r");
yylex();
fclose(yyin);
return 0;
}
CODIGO DE BISON
%{
#include
void yyerror(char *s); //Metodo sobrecargado para muestra de errores
%}
//DECLARACION DE TOKENS
%token HTTP
%token FTP
%token HTTPS
%token LDAP
%token DIAG
%token DOSPUNTOS
%token PUNTO
%token INTERROGA
%token IGUAL
%token PAREN_ABIERTO
%token PAREN_CERRADO
%token AMPERSON
%token ASTERISCO
%token MAS
%token CADENA
%start URL
%%
URL: PROTOCOLO DOSPUNTOS DIAG DIAG DOMINIO
;
PROTOCOLO: HTTP
| FTP
| HTTPS
| LDAP
;
DOMINIO: CADENA EXTENSION SUBURL
;
EXTENSION: EXTENSION PUNTO CADENA
| PUNTO CADENA
;
SUBURL: SUBURL DIAG EXPRESION
| DIAG EXPRESION
;
EXPRESION: CADENA
| ASTERISCO
| AMPERSON
| INTERROGA
| PAREN_ABIERTO
| PAREN_CERRADO
| IGUAL
| MAS
;
%%
void yyerror(char *s)
{
}