-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstack.c
More file actions
110 lines (95 loc) · 1.41 KB
/
Copy pathstack.c
File metadata and controls
110 lines (95 loc) · 1.41 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "stack.h"
#include <ctype.h>
#include <stdio.h>
SINGLE ConvSingle();
DOUBLE ConvDouble();
main()
{
stackhead = BEGSTACK;
retstackhead = BEGRETSTACK;
init_voc();
start_interpreteter("stack.con");
init_vars();
play();
/* address_interpreteter(); */
}
SINGLE ConvSingle(s)
char *s;
{
SINGLE num = 0;
while(*s && isdigit(*s))
{
num = num * 10 + (*s - '0');
s++;
}
return num;
}
DOUBLE ConvDouble(s)
char *s;
{
DOUBLE num = 0;
while(*s && isdigit(*s))
{
num = num * 10 + (*s - '0');
s++;
if(*s == '.')
s++;
}
return num;
}
void dot()
{
printf("%5d ", PopSingle());
}
void ddot()
{
printf("%10d ", PopDouble());
}
void null()
{
printf("Error\t");
}
void quit()
{
exit(0);
}
play()
{
char tmp[80];
int i, j;
int fdoub;
while(1)
{
printf("> ");
fflush(stdout);
memset(tmp, '\0', 80);
gets(tmp);
i = 0;
while(tmp[i])
{
while(tmp[i] && isspace(tmp[i]))
i++;
if(isdigit(tmp[i]))
{
fdoub = 0;
j = i;
i++;
while(tmp[i] && (isdigit(tmp[i]) || tmp[i] == '.'))
{
if(tmp[i] == '.')
fdoub = 1;
i++;
}
i--;
if(fdoub)
PushDouble(ConvDouble(&tmp[j]));
else
PushSingle(ConvSingle(&tmp[j]));
}
else
find_voc(&tmp[i], &i)();
i++;
}
printf("Ok\n");
}
}