-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.c
86 lines (80 loc) · 3.02 KB
/
parser.c
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
#include "headers/parser.h"
#define buf_size 1024
Struct parseFile(char* file_path, Struct s) {
char buffer[buf_size];
int file=open(file_path, O_RDONLY, 0666);
int n = 1, i = 0;
int w1 = 1, w2 = 0;
int cm = 0, cmd = 0;
int menores = 0, maiores = 0;
char comment[buf_size],command[buf_size];
while(n!=0) {
if(i == 0) n = read(file,buffer,buf_size);
if(n==0){
if(w2 == 1) {
command[cmd]='\0';
s = addCommand(comment,command,s);
}
break;
}
if (w1 == 1){
while(1) {
comment[cm]=buffer[i];
cm++;
i++;
if (i==n) {
i = 0;
break;
}
if (buffer[i]=='$') {
comment[cm]='\0';
cm = 0;
w1=0;
w2=1;
break;
}
}
if (w1 == 1) continue;
}
if (w2 == 1){
while(2) {
command[cmd] = buffer[i];
cmd++;
i++;
if(i==n) {
i = 0;
break;
}
if (buffer[i]=='\n') {
command[cmd]='\0';
s = addCommand(comment,command,s);
cmd = 0;
w2=0;
break;
}
}
if (w2 == 1) continue;
else i++;
}
if(i==n) {
i = 0;
continue;
}
if(buffer[i] == '>' && maiores<3){
i++;
maiores++;
continue;
}
if(maiores == 3 && menores < 3) {
if(buffer[i] == '<') menores++;
if(buffer[i] != '<' && menores > 0) menores--;
i++;
continue;
}
w1 = 1;
menores = 0;
maiores = 0;
}
close(file);
return s;
}