tfguitar 0 Denunciar post Postado Setembro 19, 2006 Olá pessoal,Estou precisando montar um analisador lexico, e me passaram o lex e o yacc pra desenvolver, mas não tenho nem idéia de como começar....Alguem poderia me dar uma idéia, ou dizer um tutorial ?valew Compartilhar este post Link para o post Compartilhar em outros sites
skimo-solar 0 Denunciar post Postado Setembro 19, 2006 Manual do Flex Site do Flex Um exemplo do uso do flex (bem besta): %{ int numeroDeLinhas = 0; int numeroDeCaracteres = 0; int inteiros = 0;%}DIGITO [0-9]%%{DIGITO}+ {numeroDeCaracteres++; inteiros++;}\n {numeroDeLinhas++; numeroDeCaracteres++;}. {numeroDeCaracteres++;}%%/* programa principal */int main() { yylex(); /* scanner gerado por Flex */ printf("Numero de Linhas = %d\n", numeroDeLinhas); printf("Numero de Caracteres = %d\n", numeroDeCaracteres); printf("Numero de Inteiros = %d\n", inteiros); return 0;} Compartilhar este post Link para o post Compartilhar em outros sites
tfguitar 0 Denunciar post Postado Setembro 21, 2006 skimo-color:tou dando uma olhada no seu código, fiz um aki beleza...aew na hora de compilar executei flex <nomeprograma>.lex, aew me gerou um codigo lex.yy.c ....E o que eu faço dps ??????????valew.... Compartilhar este post Link para o post Compartilhar em outros sites
skimo-solar 0 Denunciar post Postado Setembro 21, 2006 flex PROGRAMA.lgcc -o EXECUTAVEL lex.yy.c -lflAí vai criar o executável. Obs: Para compilar no flex você pode colocar a opção -o para escolher o nome do arquivo de saída, ao invés de lex.yy.c. Também é aconselhável utilizar a opção -i para Case Insensitive Compartilhar este post Link para o post Compartilhar em outros sites
tfguitar 0 Denunciar post Postado Setembro 21, 2006 Aew eu de novo :( , mas tá dolorido....peguei esse código de exemplo do manual da flex e na hora de compilar dá esse erro... "teste.l", line 48: premature EOFe não foi só nesse exemplo mas em vários outros.....o que está havendo.....Segue código....%{ #include <math.h> %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\n", yytext ); } {ID} printf( "An identifier: %s\n", yytext ); "+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext ); "{"[^}\n]*"}" /* eat up one-line comments */ [ \t\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\n", yytext ); %% main( argc, argv ) int argc; char **argv; { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); } Compartilhar este post Link para o post Compartilhar em outros sites
skimo-solar 0 Denunciar post Postado Setembro 22, 2006 Experimente remover os espaços nas declarações. Elas devem estar no começo da linha: %{ #include <math.h>%} DIGIT [0-9]ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\n", yytext ); } {ID} printf( "An identifier: %s\n", yytext ); "+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext ); "{"[^}\n]*"}" /* eat up one-line comments */ [ \t\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\n", yytext ); %%/* resto do código */ Compartilhar este post Link para o post Compartilhar em outros sites