• Lunes 13 de Mayo de 2024, 06:17

Autor Tema:  analizador lexico  (Leído 1357 veces)

yonicm

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
analizador lexico
« en: Viernes 11 de Junio de 2010, 19:26 »
0
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)
{
}

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: analizador lexico
« Respuesta #1 en: Martes 15 de Junio de 2010, 03:23 »
0
Buenas.

Donde esta concretamente tu problema?

Algo que note en tu codigo, es que algunas expresiones tienen los no-terminales entre {}, por ejemplo:
PROTOCOLO {HTTP}|{FTP}|{HTTPS}|{LDAP}

Lo que en las quasi-gramaticas representa potencia (no se si es el caso del lex)

Por ejemplo IDEN [a-zA-Z]{5} seria una combinacion de 5 caracteres.

El bison tiene integrasion con el lex?
porque sino tendrias que hacer un codigo que haga de link entre en scanner y el parser.

Si amplias un poco mas tu problema quesas se te pueda ayudar un poco mas.

Saludos
The sweet smell of a great sorrow lies over the land.