Ir ao conteúdo
  • Cadastre-se

Marcelo Scilingo

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

1
  1. Então, consegui implementar o tradutor léxico para ler um arquivo txt e printar o tipo de token (operador/palavra-chave/identificador). Mas ainda falta implementar para ele identificar os parenteses "()" e o token de atribuição "=" (que eu acabei colocando dentro de operadores. Segue o código: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<locale.h> int isKeyword(char buffer[]){ char keywords[32][10] = {"auto","break","case","char","const","continue","default", "do","double","else","enum","extern","float","for","goto", "if","int","long","register","return","short","signed", //declara as palavras chaves para serem lidas "sizeof","static","struct","switch","typedef","union", "unsigned","void","volatile","while"}; int i, flag = 0; for(i = 0; i < 32; ++i){ //lêe as palavras chaves individualmente if(strcmp(keywords[i], buffer) == 0){ flag = 1; break; } } return flag; } int main(){ setlocale(LC_ALL, "Portuguese"); //colocar acentos char ch, buffer[15], operators[] = "+-*/%="; //declara o que é operador FILE *fp; int i,j=0; //puxa o arquivo e atribui ele a uma variável char* filename = ""; //CAMINHO DO PROGRAMA TXT, ADICIONAR ELE AQUI ENTRE OS "" fp = fopen(filename,"r"); if(fp == NULL){ //roda este if se o arquivo não é identificado printf("não é possível abrir o arquivo\n"); exit(0); } while((ch = fgetc(fp)) != EOF){ //utiliza esta condição para identificar se é um operador/palavra-chave/identificador for(i = 0; i < 6; ++i){ if(ch == operators[i]) printf("%c é um operador\n", ch); } if(isalnum(ch)){ buffer[j++] = ch; } else if((ch == ' ' || ch == '\n') && (j != 0)){ buffer[j] = '\0'; j = 0; if(isKeyword(buffer) == 1) printf("%s é uma palavra-chave\n", buffer); else printf("%s é um identificador\n", buffer); } } fclose(fp); return 0; } program.txt usei este código simples para executar o programa Obrigado :)
  2. Então pessoal, não tenho a menor ideia de como começar isso, qualquer ajuda conta Construir um tradutor, na forma de um programa em linguagem C completo, que avalie, em um arquivo txt, expressões aritméticas formatadas em linguagem C, procurando encontrar lexemas e padrões de tokens. Caso encontre, deve informar a ocorrência criando 2 arquivos de saída: um com o fluxo de tokens e seus valores de atributo respectivos, e outro com a tabela de símbolos. Seguir a sequência: a) Elaboração do programa em C para tokens números b) Complementação do programa em C para tokens operadores aritméticos c) Complementação do programa em C para token de atribuição d) Complementação para tokens open and close parenthesis e) Complementação para token end of statement

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...