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");
}
Pergunta
brunogomes18
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:
Obrigado
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.