Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Analisador Léxico


brunogomes18

Pergunta

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

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...