33 lines
509 B
C
33 lines
509 B
C
|
|
||
|
enum TokenType
|
||
|
{
|
||
|
IF, END, ID, NUM, READ, WrITE, UNTIL, ....
|
||
|
}
|
||
|
|
||
|
|
||
|
enum NodeKind { statement, expression };
|
||
|
enum StatKind { if, repeat, assign, read, write };
|
||
|
enum ExpKind { op, const, id };
|
||
|
enum ExpType { void, integer, boolean };
|
||
|
|
||
|
struct treenode
|
||
|
{
|
||
|
treenode* child[3]; //
|
||
|
treenode* sibling; // <---- next statement...
|
||
|
|
||
|
int lineno;
|
||
|
NodeKind node_kind;
|
||
|
union {
|
||
|
statkind s;
|
||
|
expkind e;
|
||
|
} kind;
|
||
|
union {
|
||
|
TokenType Op;
|
||
|
int val;
|
||
|
char* name;
|
||
|
} attr;
|
||
|
|
||
|
|
||
|
exptype type; <- for type checking...
|
||
|
};
|