[seguinte]
Crie um autómato finito e uma gramática de expressões capaz de representar um numero inteiro.
Baseado nestas duas ferramentas, crie um programa em LEX (flex) que detecte se um determinado número introduzido pelo utilizador obedece a essas regras.
Depois de concluído, compare o código gerado pelo flex com o código apresentado de seguida e retire conclusões.
#include<stdio.h> void main() { int a; char estado='A'; int erro=0; printf("Introduza dados:"); while(((a=getchar())!='\n') && (erro==0)) if ((a>='0') && (a<='9')) estado='B'; else erro=1; if ((!erro) && (estado=='B')) printf("Foi lido um inteiro.\n"); else printf("Não foi lido um inteiro.\n"); }
S →
B A
B →
B A
A →
e
B →
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
%{ %} /* definição de dígito */ digito [0-9] %% [0-9]+ {printf("Encontrado inteiro: %s\n",yytext);} [^ \t\n]+ {printf("Encontrado não inteiro: %s\n",yytext);} [ \t\n] ; /* são ignorados */ <<EOF>> {printf("Fim de dados\n");return;} /* ctrl+D (unix) ctrl+Z return (DOS) */ %% int main() { printf("Insira dados:\n"); yylex(); } /* se definir esta função não necessita compilar com o parâmetro -lfl */ int yywrap() { return(1); }
[seguinte]
Ultima alteração: sexta-feira, 24 de Novembro de 2000 às 21:29