-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
69 lines (58 loc) · 1.24 KB
/
main.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
#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <stdarg.h>
#include "UGL.H"
jmp_buf ExprJumpBuf;
void Error( char *Str, ... )
{
va_list ap;
printf("ERROR: ");
va_start(ap, Str);
vprintf(Str, ap);
va_end(ap);
printf("\n");
longjmp(ExprJumpBuf, 1);
}
void GetStr( char *Str, int MaxLen )
{
int i = 0;
char ch;
while ((ch = getchar()) != '\n')
if (Str != NULL && i < MaxLen - 1)
Str[i++] = ch;
if (Str != NULL && i < MaxLen)
Str[i] = 0;
}
int main( void )
{
char str[MAX];
FILE *F;
QUEUE Q = {NULL, NULL};
QUEUE QRes = {NULL, NULL};
if (setjmp(ExprJumpBuf))
{
ClearStack(&StackEval);
ClearQueue(&Q);
ClearQueue(&QRes);
ClearQueue(&Queue1);
ClearStack(&Stack2);
// _getch();
return 0;
}
printf("Input file name: ");
GetStr(str, sizeof(str));
F = fopen(str, "r");
if (F != NULL)
{
static char Buf[10000];
while (fgets(Buf, sizeof(Buf) - 1, F) != NULL)
Scanner(&TokList, Buf);
fclose(F);
}
DisplayQueue(&TokList); // Printing scanner results
ParseProgram();
DoCmd(Proga);
DisplayVarTable();
ClearQueue(&QRes);
}