?? typedef.h
字號:
//TypeDef.h
//本文件定義從詞法到語義所有的內部表示
#pragma once
using namespace std;
//定義符號的類型(注意,其中內容和name數組是一致的。)
typedef enum {Vn,Key,Border,Arithmetic,Relation,Intc,Charc,Id,$,Action,Default,Eof} symbol_type;
//定義符號的結構,即類型和在表中的偏移
typedef pair < symbol_type, int > symbol; // a symbol in the grammer
//定義字符串到內部符號的映射,即關聯數組
typedef map < string, symbol, less<string> > symbols;
//定義終極符和非終極符
typedef symbol nonterminal;
typedef symbol terminal;
//定義產生式的結構,一個非終極符作為左部, 一個符號數組作為右部
struct production
{
nonterminal lhs;
vector<symbol> rhs;
};
//定義TOKEN的內部類型
class TOKEN
{
public:
TOKEN(symbol v, int l):value(v),line(l) {};
~TOKEN() {};
symbol value; //TOKEN的內部表示
int line; //該TOKEN對應的文本所在行數
};
//initalizing semantic analyser
//*****************************************************
// **********語義分析需要用到的類型及變量定義************
//*****************************************************
//標識符的類型:類型,變量,產生式的標識符
typedef enum {typeKind,varKind,procKind} IdKind;
//變量的類別。dir表直接變量(值參),indir表示間接變量(變參)
typedef enum {dir,indir} AccessKind;
struct typeIR;
//標識符的屬性結構定義
typedef struct
{
struct typeIR * idtype; //指向標識符的類型內部表示
IdKind kind; //標識符的類型
union
{
struct
{
AccessKind access; //判斷是變參還是值參
int level;
int off;
bool isParam; //判斷是參數還是普通變量
}VarAttr;//變量標識符的屬性
struct
{
int level; //該過程的層數
}ProcAttr;//過程名標識符的屬性
}More;//標識符的不同類型有不同的屬性
}AttributeIR;
//*****************************************************
// ***************** 類型內部表示 ******************
//*****************************************************
//類型的枚舉定義
typedef enum {intTy,charTy,arrayTy,recordTy,boolTy} TypeKind;
struct typeIR;
struct field;
//域類型單元結構定義
typedef struct field
{
char * id; //變量名/
int off; //所在記錄中的偏移
struct typeIR * UnitType; //域中成員的類型
struct field * next; //指向下一個域成員
}Field;
//類型的內部結構定義
typedef struct typeIR
{
int size; //類型所占空間大小
TypeKind kind;
union
{ struct
{
struct typeIR * elemTy; //記錄數組元素的類型
int low; //記錄數組類型的下界
int top; //記錄數組類型的上界
}ArrayAttr;
Field * body; //記錄類型中的域
} More;
}TypeIR;
//語義記錄的類型:整型常量,標識符,類型,域,數組,錯誤
enum semantic_record_kind { INTC, ID, TYPE, FIELD, ARRAY, ERROR };
//定義語義記錄
typedef struct sem_rec
{
enum semantic_record_kind record_kind;
union
{
int intc; //INTC
char *id_record; //ID
TypeIR * type_record; //TYPE
struct field * field_record; //FIELD
int err_record; //ERROR
} sem_info;
} semantic_record;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -