⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typedef.h

📁 一个简单的C语言子集的编译器,一个简单的C语言子集的编译器
💻 H
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -