-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathglobals.h
134 lines (106 loc) · 3.61 KB
/
globals.h
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/****************************************************/
/* File: globals.h */
/* Global types and vars for C- compiler */
/* must come before other include files */
/* C- Compiler Project */
/* ZEBRA */
/****************************************************/
#ifndef _GLOBALS_H_
#define _GLOBALS_H_
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
/**************************************************/
/********* Language tokens for scaning ************/
/**************************************************/
/* MAXRESERVED = the number of reserved words */
#define MAXRESERVED 6
typedef enum
/* book-keeping tokens */
{ENDFILE,ERROR,
/* reserved words */
IF,ELSE,INT,RETURN,VOID,WHILE,
/* multicharacter tokens */
ID,NUM,
/* special symbols */
ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI,GT,LTE,GTE,NE,LB,RB,LF,RF,COMMA
} TokenType;
extern FILE* source; /* source code text file */
extern FILE* listing; /* listing output text file */
extern FILE* code; /* code text file for TM simulator */
extern int lineno; /* source line number for listing */
/**************************************************/
/*********** Syntax tree for parsing ************/
/**************************************************/
typedef enum {StmtK,ExpK,DecK} NodeKind;
typedef enum {IfK,WhileK,CallK,ReturnK,CompoundK} StmtKind;
typedef enum {OpK,ConstK,IdK,AssignK} ExpKind;
typedef enum {VarK,ArrayK,FunK} DecKind;
/* ExpType is used for type checking */
typedef enum {Void,Integer,Boolean} ExpType;
#define MAXCHILDREN 3
typedef struct treeNode
{ struct treeNode * child[MAXCHILDREN];
struct treeNode * sibling;
int lineno;
NodeKind nodekind;
union { StmtKind stmt; ExpKind exp;DecKind dec;} kind;
union { TokenType op;
int val;
char * name; } attr;
int value; /* array index */
int isArray;
/*
* If isParameter is TRUE, then this node declares an actual parameter
* to a function.
*/
int isParameter;
/* If isGlobal is TRUE, then the variable is a global */
int isGlobal;
/* parameter count and local variable count*/
int param_size;
int local_size;
/* scope of the node */
int scope;
ExpType type; /* for type checking of exps */
} TreeNode;
/**************************************************/
/*********** Symantic Analyser scopes ************/
/**************************************************/
extern int HighScope;
/**************************************************/
/*********** Flags for tracing ************/
/**************************************************/
/* EchoSource = TRUE causes the source program to
* be echoed to the listing file with line numbers
* during parsing
*/
extern int EchoSource;
/* TraceScan = TRUE causes token information to be
* printed to the listing file as each token is
* recognized by the scanner
*/
extern int TraceScan;
/* TraceParse = TRUE causes the syntax tree to be
* printed to the listing file in linearized form
* (using indents for children)
*/
extern int TraceParse;
/* TraceAnalyze = TRUE causes symbol table inserts
* and lookups to be reported to the listing file
*/
extern int TraceAnalyze;
/* TraceCode = TRUE causes comments to be written
* to the TM code file as code is generated
*/
extern int TraceCode;
/* Error = TRUE prevents further passes if an error occurs */
extern int Error;
#endif