?? c0compiler.h
字號(hào):
#define MYCOMPILER
#define MAXWORD 10 //token和keyword最大長度
#define MAXLENGTH 30
#define MAXC 50 //符號(hào)表的最大容量
#define MAXOP 500 //最大的操作指令條數(shù)
#define MAXLEV 10 //最大的層數(shù)
#define MAXF 10 //最多的實(shí)常量數(shù)
#define MAXCASE 50
#define MAXGO 100 //最大運(yùn)行棧
#define MAXGOLEV 10 //運(yùn)行棧最大的調(diào)用層
#define MAXS 5 //printf語句中最多的轉(zhuǎn)換字符數(shù)
#define MAXERROR 50
#define kk 12 //關(guān)鍵詞個(gè)數(shù)
char Word[MAXWORD]; //store token
int num; //store 整數(shù)
char sisstring[MAXLENGTH]; //store 字符串
int sym; //store 標(biāo)號(hào);
char cischar; //store 字符
char *Keyword[]={ //關(guān)鍵字
"const","int","char","void",
"main","if","else", "do","while",
"scanf","printf", "return"
};
char *oprate[]={ //操作碼
"LDA","LDI","JME","JMC","JMP","CAS",
"RED","EXF","WRR","INF","ADD","SUB","",
"MUL","DIV","MUS",">","<","==","!=",">=",
"<=","STO","CAL","MKF","EXP"
};
FILE* FIN, *FOUT; //輸入輸出文件指針
char fp[20]; //輸入文件名
union Cha{
int num;
char cischar;
};
struct Character{ //符號(hào)表
char *name ;
int type,lev,adr,kind;
Cha uchar;
};
struct opr{ //中間代碼
int op,lev,x;
};
char* err_msg[] = //定義出錯(cuò)提示信息
{
/*0*/ "",
/*1*/ "標(biāo)識(shí)符或數(shù)字過長",
/*2*/ "非法單詞",
/*3*/ "缺少符號(hào)",
/*4*/ "缺少類型標(biāo)識(shí)符",
/*5*/ "字符串過長或缺少符號(hào)",
/*6*/ "此處缺少運(yùn)算的因子",
/*7*/ "符號(hào)表出界",
/*8*/ "標(biāo)識(shí)符重復(fù)定義",
/*9*/ "此處應(yīng)有'='",
/*10*/ "變量使用出錯(cuò)",
/*11*/ "無返回值函數(shù)不能用在此處",
/*12*/ "缺少“}”",
/*13*/ "缺少','",
/*14*/ "無返回值函數(shù)不能有return語句",
/*15*/ "無主函數(shù)",
/*16*/ "函數(shù)調(diào)用時(shí)參數(shù)個(gè)數(shù)不對(duì)",
/*17*/ "缺少'('",
/*18*/ "缺少')'",
/*19*/ "編譯生成指令數(shù)過多",
/*20*/ "標(biāo)識(shí)符未定義",
/*21*/ "轉(zhuǎn)換符用法錯(cuò)誤,為非變量型數(shù)據(jù)賦值",
/*22*/ "缺少“;”",
/*23*/ "缺少“{”",
/*24*/ "運(yùn)行棧泄漏"
/*25*/ "函數(shù)調(diào)用超過了最大的層次數(shù)",
/*26*/ "函數(shù)返回值與函數(shù)類型不匹配",
/*27*/ "此處應(yīng)為標(biāo)識(shí)符",
/*28*/ "變量的類型和值的類型不匹配",
};
int getsym(); //詞法分析程序
int enter(int lev,int type,int kind); //把變量填入符號(hào)表
int constdeclaration(); //分析常量說明部分
int program(); //分析程序
int charcheck(); //檢查標(biāo)識(shí)符是否重復(fù)定義
int constdefine( int type ); //分析常量定義
int vardefine( int type); //分析變量說明部分
int returnfunction( int type) ; //有返回值的函數(shù)
int voidfunction( ); //無返回值的函數(shù)定義語句
int statementArray( ); //語句列
int statement( ); //語句
int ifstatement( ); //if條件語句
int whilestatement( ); //while循環(huán)語句
int scanfstatement( ); //scanf讀語句
int printfstatement( ); //printf寫語句
int returnstatement( ); //return語句
int assignstatement(int a); //賦值語句
int mainfunction( ); //主函數(shù)
int call(int a); //函數(shù)調(diào)用語句
int expression(); //表達(dá)式
int gen(int op,int lev,int x); //產(chǎn)生一條表達(dá)式
int term(); //項(xiàng)
int factor(); //因子
int find(); //在符號(hào)表中查找標(biāo)識(shí)符是否存在
int Interpret(); //解釋執(zhí)行程序
int backout(); //不用的變量要退出符號(hào)表
void error_msg(int i);
/************************數(shù)字意義*****************************8
(1)type,sym:
標(biāo)識(shí)符 1 內(nèi)部字符串
整數(shù) 2 整數(shù)值
字符 4 字符
字符串 5 字符串
const 10 ---
int 11 ---
char 12 ---
void 13 ---
main 14 ---
if 15 ---
else 16 ---
do (switch) 17 ---
while 18 ---
scanf 19 ---
printf 20 ---
return 21 ---
+ 31 ---
- 32 ---
* 33 ---
/ 34 ---
} 35 ---
) 36 ---
( 37 ---
; 38 ---
, 39 ---
{ 40 ---
" 41 ---
" 42 ---
' 43 ---
' 44 ---
> 45 ---
< 46 ---
== 47 ---
!= 48 ---
>= 49 ---
<= 50 ---
= 51 ---
(2) type:
0 para(參數(shù))、
1 pro(有返回值的函數(shù))、
2 voidpro(無返回值的函數(shù))、
3 var(變量)、
4 const(常量)、
5 main(主函數(shù))
************************************************* */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -