-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncarquivos.cpp
101 lines (89 loc) · 2.89 KB
/
funcarquivos.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "structure.cpp"
void identificarPalavrasReservadas(Palavras* linha,int num_lin) {
Palavras* p = linha;
int is_token = 0; //Vai servir pra identificar palavras maiusculas
int i = 0; //CONTADOR
while (p != NULL) {
for (i = 0; i<(tam_palavras_reservadas-1); i++) //VERIFICA SE A PALAVRA ATUAL � RESERVADA
if (strcmp(p->info, lexemas_reservadas[i]) == 0){
is_token = 1;
p->tok = i;
/* //sintático
verificadorSintatico(p->info, num_lin, sin);
*/
if (i>=12) // ADICIONA O ATRIBUTO, CASO POSSA TER, IMPORTANTE LEMBRAR QUE O ATRIBUTO SÓ ESTÁ SENDO FEITO DESSA FORMA PORQUE ELE ESTÁ ORGANIZADO DESSE JEITO
p->attr = i-12;
else
p->attr = 3;
}
if ((verificarId(p->info) == 1) and (is_token == 0)){
p->tok = 16;
p->attr = 4;
}
p->line = num_lin;
p = p->prox;
is_token = 0;
}
//printarLinha(linha);
}
Palavras* pegarPalavras(char* linha){
Palavras* p = (Palavras*) malloc (sizeof(Palavras));
p->ant=p->prox=NULL; //inicia estrutura de palavras
p->info=NULL;
p->id=1;
Palavras* palavra_retornada = p;
int contador=1;
char* palavra = strtok(linha, "\t ()\n");
while (palavra != NULL) {
//define a palavra e define a coluna
p->info = (char*) malloc (sizeof(palavra));
strcpy(p->info,palavra);
//printf("%s ",p->info); //DEBUG ONLY
p->id = contador;
//aloca uma proxima palavra e avança a estrutura
p->prox = (Palavras*) malloc (sizeof(Palavras));
Palavras* temp = p;
p=p->prox;
p->ant=temp;
p->prox=NULL;
//passa para a proxima palavra
palavra = strtok(NULL, "\t ()\n");
contador++;
}
p->ant->prox = NULL;
free(p);
return (palavra_retornada);
}
Linhas* pegarLinhas(char* nome_do_arquivo) {
char linha[200];
//INICIANDO A ESTRUTURA DE LINHAS
Linhas* l = (Linhas*) malloc (sizeof(Linhas)); // Cria uma estrutura de linhas genéricas
l->ant=l->prox= NULL; //inicia a estrutura
l->info=NULL; // mesma coisa
l->id=1; // msm coisa
Linhas* linha_retornada = l; // é o que retorna obviamente
int contador=1;
FILE *arq;
arq = fopen(nome_do_arquivo, "r");
if (arq == NULL)
printf("Erro, nao foi possivel abrir o arquivo.\n");
else
while ((fgets(linha, sizeof(linha), arq)) != NULL){//VAI GUARDAR AS LINHAS DO CODIGO EM UM VETOR DE LINHAS
//printf("\n %s \n",linha);
l->info = pegarPalavras(linha); //PEGA A LINHA E TRANSFORMA EM UMA ESTRUTURA DE PALAVRAS
//printf("\n %s \n",linha);
l->id = contador; // DEFINE A LINHA DO PROGRAMA
l->prox = (Linhas*) malloc (sizeof(Linhas)); // CRIA UMA NOVA ESTRUTURA PARA UMA NOVA LINHA
Linhas* temp = l; // SALVA O ENDEREÇO DA LINHA ATUAL
l= l->prox; // DEFINE A PROXIMA LINHA COMO LINHA ATUAL
l->ant = temp; //APONTA PARA A LINHA ANTERIOR
l->prox = NULL; // PROXIMO VAI APONTAR PRA NULL
contador++; // CONTINUA CONTADOR
//identificarPalavrasReservadas(linha);
//printf("\n");
}
fclose(arq);
l->ant->prox = NULL;
free(l);
return linha_retornada;
}