typedef.h

来自「一个简单的C语言子集的编译器,一个简单的C语言子集的编译器」· C头文件 代码 · 共 81 行

H
81
字号
#ifndef TYPEDEF_H_
#define TYPEDEF_H_

#include <string>
using namespace std;

const int MAXCHILDREN = 5;
const int BUCKET_SIZE = 211;

typedef enum {
	ENDFILE,ERROR,
	IF,ELSE,WHILE,RETURN,VOID,INT,
	PLUS,MINUS,MUL,DIV,LT,LTEQ,GT,GTEQ,EQ,
	NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,
	LSQUAR,RSQUAR,LBRACE,RBRACE,LCOMMENT,RCOMMENT,
	ID,NUMBER
} TokenType;

typedef enum {
	DECLAR,OP,RELOP,CSTMT,STMT,REFER,CALL,PARAM,EXP,NUM
} Kind;

typedef enum {
	VAR_DECLAR,FUNC_DECLAR,ARRAY_DECLAR
} DeclarKind;

typedef enum {
	IF_STMT,WHILE_STMT,RETURN_STMT
} StmtKind;
typedef enum {
	ASSIGN_EXP,SIMPLE_EXP
} ExpKind;
typedef union {
	DeclarKind declarK;StmtKind stmtK;ExpKind expK;
} ChildKind;
typedef enum {
	BOOLEAN_TYPE,INTEGER_TYPE,VOID_TYPE,ERROR_TYPE
} Type;
typedef enum {
	VAR_SYMBOL,FUNC_SYMBOL,ARRAY_SYMBOL,
	ARRAYADDR_SYMBOL,ERROR_SYMBOL
} SymbolType;
struct bucketlist;
typedef struct treenode{
	Kind kind;
	ChildKind childkind;
	TokenType tokenT;

	//attribute
	string name;
	Type type;
	int arraynum;

	//used only when is compound statement
	bucketlist * pBucketList;

	treenode *pChild[MAXCHILDREN];
	treenode *pNext;
	treenode *pPrev; //used only when in argument-list
	int lineno;
} TreeNode;
typedef struct symbolrecord{
	symbolrecord * pNext;
	string name;
	Type type;
	SymbolType symboltype;

	//used only when is function declaration
	symbolrecord * pParam;
	int paramAlloc;
	int localAlloc;

	int nestlevel;
	int location;
	int lineno;
} SymbolRecord;
typedef struct bucketlist{
	bucketlist * pNext;
	SymbolRecord * pRecord[BUCKET_SIZE];
} BucketList;
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?