Repository navigation
Expand file tree
/
Copy pathcode_example.d
More file actions
85 lines (75 loc) · 1.55 KB
/
Copy pathcode_example.d
File metadata and controls
85 lines (75 loc) · 1.55 KB
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
char c;
function void error(){
//puts
endops();
}
function num expression(num aux){
num resultado;
char op := '+';
if ((c == '+') || (c == '-')) {
op := c;
}
resultado := termino();
if (op == '-') {
resultado := neg(resultado);
}
while ((c == '+') || (c == '-')){
op := c;
aux := termino();
if(op == '+'){
resultado := (aux + resultado);
//break;
} else {
if(op == '-') {
resultado :-= aux;
//break;
}
}
}
return resultado;
}
function num factor(){
num resultado := 0;
if (c == '('){
resultado := expression(resultado);
if (c == ')'){
resultado := -resultado;
} else {
error();
}
return resultado;
}else{
return numero();
}
}
function num termino(){
num resultado;
num aux;
char op;
resultado := factor();
while ((c == '*') || (c == '/')){
op := c;
aux := factor();
if(op == '*'){
resultado :*= aux;
//break;
} else {
if(op == '/') {
resultado :/= aux;
//break;
}
}
}
return resultado;
}
function void main(){
num resultado;
while(c != '\n' ){
resultado := expression(resultado);
if(c == '\n'){
print(resultado);
} else {
error();
}
}
}