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 :)