Ir para conteúdo
Fórum Script Brasil

brunogomes18

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre brunogomes18

brunogomes18's Achievements

0

Reputação

  1. Olá, Estou implementando um Analisador Léxico e estou com dúvidas, pois a saída gerada em um arquivo .txt está com caracteres estranhos. Se eu colocar constantes no arquivo que vai ser lido , no arquivo de saida elas são impressas com caracteres e aspas sendo que devem aparecer só os numeros. Caso tenha algo a mais para ajudar na implementação favor comentar. Segue abaixo o código: #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <math.h> #include <time.h> #include <stdlib.h> void sleep( clock_t wait ) //Wait é o tempo que deverá ficar ocioso.. em milisegundos { clock_t goal = ( wait + clock() ); while( goal > clock() ); } int num(char pegachar){ //- Se número if(pegachar>='0' && pegachar<='9') return 1; return 0; } int main() { int i; //indice int estado; // 0 - inicial , 1 - final , 2 - numero define o estado do automata char pegachar; //pega o proximo caracter char charprox; //letra que a função getc esta lendo FILE *arqler, *arqescrever; //criando arquivo de leitura e arquivo de saida char temp[100]; // arquivo temporario que armazena carcater atual char nome[40]; //nome do arquivo a ser lido char *palavras[] = {"begin" , "boolean", "do", "else", "end", "false", "if", "integer", "program", "read", "then", "true", "var", "while", "write"}; //palavras a serem comparadas printf("Analisador Léxico em C\n"); printf("\nDigite o nome do arquivo a ser lido:\n"); printf("\nO arquivo deve estar na mesma pasta do fonte do programa\n"); scanf("%s", &nome); arqler = fopen(nome,"r"); arqescrever = fopen("tokens.txt", "w"); if(arqler == 0) { printf("Arquivo não encontrado!"); printf("\nATENÇÃO VERIFIQUE SE O ARQUIVO A SER LIDO ESTA NA MESMA PASTA DO ARQUIVO FONTE"); getch(); exit(0); } printf("\nLoading..."); while(!feof(arqler)) { sleep(100); printf("...."); estado = 0; while (estado != 1) { i=0; pegachar = getc(arqler); switch (estado) { case 0: if (pegachar == EOF) { estado = 1; } else if (isdigit(pegachar)) { estado = 2; } else if (pegachar == '+') { fprintf(arqescrever, "\nOPERADOR ADICAO : %c",pegachar); estado = 1; } else if (pegachar == '-') { fprintf(arqescrever, "\nOPERADOR ADICAO : %c",pegachar); estado = 1; } else if (!isspace(pegachar)) { estado = 1; } break; case 2: while(isdigit(pegachar)) { temp[i] = pegachar; pegachar = getc(arqler); i++; } fprintf(arqescrever, "\nCONSTANTE : %s",temp); estado = 1; strncpy(temp,"",100); break; } } } fclose(arqescrever); system("C:\\tokens.txt"); } Obrigado
×
×
  • Criar Novo...