資源簡介
PL/0 詞法分析、語法分析、語義分析與中間代碼生成、解釋執行
最終結果輸出目標代碼、符號表、解釋執行結果
最終結果輸出目標代碼、符號表、解釋執行結果

代碼片段和文件信息
#include
#include
#include
#define?num_word?13???????//關鍵字個數?
#define?num_tab?100?????//?符號表容量?
#define?num_bit?14???????//?數字的最大位數?
#define?al?10?????????//?標識符的最大長度??
#define?num_err?30????
#define?amax?2048?????//?地址上界
#define?levmax?3??????//?最多只允許3層嵌套
#define?cxmax?200?????//?最多的虛擬機代碼數
#define?num_ssize?500?//運行時數據棧元素最多為500個?
?
enum?SYM?{
SYMUNUSE//0不設保留字
SYMIDENTIFIER?SYMNUM
SYMPLUS?SYMMINUSSYMMUL?SYMDIV?//+?-?*?/
SYMODD?
SYMEQL?//=
SYMNEQ//!=
SYMLSS?//?<
SYMLEQ?//<=
SYMBIG?//?>
SYMBIGEQ?//?>=
SYMLEFT?//?(
SYMRIGHT?//?)
SYMCOM?//?
SYMSEM?//?;分號
SYMPOT?//?.
SYMASSI?//?:=
SYMBEGIN?SYMEND?SYMIF?SYMTHEN?SYMWHILE
SYMWRITE?SYMREAD?SYMDO?SYMCALL?SYMCONST
SYMVAR?SYMPROCEDURE
};
#define?symnum?32
enum?object?{
constant
variable
procedure
};
enum?fct?{
LIT?OPR?LOD
STO?CAL?INT
JMP?JPC
};
#define?fctnum?8
struct?instruction
{
enum?fct?f;?
int?l;
int?a;?????
};
//int?stacktop;
bool?listswitch;????
bool?tableswitch;??
char?ch;???
enum?SYM?sym;?
char?id[al?+?1];??????//?當前SYMIDENTIFIER,多出的一個字節用于存放0?
int?num;????????????//當前SYMNUM?
int?chadr?ll;?????????//?getch使用的計數器,chadr表示當前字符(ch)的位置?
int?cx;?????????????//?虛擬機代碼指針?取值范圍[0?cxmax-1]
char?line[81];??????//?讀取行緩沖區?
char?a[al?+?1];???????//?臨時符號,多出的一個字節用于存放0?
struct?instruction?code[cxmax];?//存放虛擬機代碼的數組?
char?word[num_word][al];????????//保留字?
enum?SYM?wsym[num_word];?????//保留字對應的符號值?
enum?SYM?ssym[256];??????//單字符的符號值?
char?mnemonic[fctnum][5];???//虛擬機代碼指令名稱?
bool?declbegsys[symnum];????//?表示聲明開始的符號集合?
bool?statbegsys[symnum];????//?表示語句開始的符號集合?
bool?facbegsys[symnum];?????//?表示因子開始的符號集合?
//符號表
struct?TABLE
{
char?name[al]; ???
enum?object?kind;
int?val;????????????
int?level;??????????
int?adr;????????????
int?size;??????????
};
struct?TABLE?table[num_tab];?//?符號表?
FILE*?fin;
char?fname[al];
int?err;????????//錯誤計數
void?error(int?n);
void?GETSYM();
void?getch();
void?init();
void?GEN(enum?fct?x?int?y?int?z);
void?test(bool*?s1?bool*?s2?int?n);
int?inset(int?e?bool*?s);
int?addset(bool*?sr?bool*?s1?bool*?s2?int?n);
int?subset(bool*?sr?bool*?s1?bool*?s2?int?n);
int?mulset(bool*?sr?bool*?s1?bool*?s2?int?n);
int?BLOCK(int?lev?int?tx?bool*?fsys);
void?exec();
void?factor(bool*?fsys?int*?ptx?int?lev);
void?term(bool*?fsys?int*?ptx?int?lev);
void?condition(bool*?fsys?int*?ptx?int?lev);
void?expression(bool*?fsys?int*?ptx?int?lev);
void?statement(bool*?fsys?int*?ptx?int?lev);
void?listcode(int?cx0);
void?printcode();
void?vardeclaration(int*?ptx?int?lev?int*?pdx);
void?constdeclaration(int*?ptx?int?lev?int*?pdx);
int?position(char*?idt?int?tx);
void?enter(enum?object?k?int*?ptx?int?lev?int*?pdx);
int?whereb(int?l?int*?s?int?b);
void?init()
{
int?i;
/*?設置單字符符號?*/
for?(i?=?0;?i?<=?255;?i++)
{
ssym[i]?=?SYMUNUSE;
}
s
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-12-18?11:58??final\
?????目錄???????????0??2019-12-08?23:43??final\.vs\
?????目錄???????????0??2019-12-08?23:43??final\.vs\final\
?????目錄???????????0??2019-12-18?10:22??final\.vs\final\v16\
?????文件???????41984??2019-12-18?11:58??final\.vs\final\v16\.suo
?????文件?????5750784??2019-12-18?11:58??final\.vs\final\v16\Browse.VC.db
?????目錄???????????0??2019-12-08?23:43??final\.vs\final\v16\ipch\
?????目錄???????????0??2019-12-11?13:59??final\.vs\final\v16\ipch\AutoPCH\
?????目錄???????????0??2019-12-10?14:00??final\.vs\final\v16\ipch\AutoPCH\83aad7005a654c2b\
?????文件????31719424??2019-12-10?14:00??final\.vs\final\v16\ipch\AutoPCH\83aad7005a654c2b\FINAL.ipch
?????目錄???????????0??2019-12-10?12:32??final\.vs\final\v16\ipch\AutoPCH\8c6080a761c5afa0\
?????文件?????3801088??2019-12-10?12:32??final\.vs\final\v16\ipch\AutoPCH\8c6080a761c5afa0\FINAL.ipch
?????目錄???????????0??2019-12-10?13:04??final\.vs\final\v16\ipch\AutoPCH\c3613f418180513b\
?????文件?????3604480??2019-12-10?13:57??final\.vs\final\v16\ipch\AutoPCH\c3613f418180513b\FINAL.ipch
?????目錄???????????0??2019-12-12?13:53??final\.vs\final\v16\ipch\AutoPCH\dcb3fbd016563d50\
?????文件?????3604480??2019-12-18?10:22??final\.vs\final\v16\ipch\AutoPCH\dcb3fbd016563d50\FINAL.ipch
?????目錄???????????0??2019-12-17?19:24??final\Debug\
?????文件???????57856??2019-12-17?19:24??final\Debug\final.exe
?????文件??????781800??2019-12-17?19:24??final\Debug\final.ilk
?????文件?????????567??2019-12-17?19:24??final\Debug\final.log
?????文件???????64445??2019-12-17?19:24??final\Debug\final.obj
?????文件???????64421??2019-12-11?15:16??final\Debug\final.obj.enc
?????文件??????733184??2019-12-17?19:24??final\Debug\final.pdb
?????目錄???????????0??2019-12-17?19:24??final\Debug\final.tlog\
?????文件?????????750??2019-12-17?19:24??final\Debug\final.tlog\CL.command.1.tlog
?????文件????????4044??2019-12-17?19:24??final\Debug\final.tlog\CL.read.1.tlog
?????文件?????????384??2019-12-17?19:24??final\Debug\final.tlog\CL.write.1.tlog
?????文件?????????199??2019-12-17?19:24??final\Debug\final.tlog\final.lastbuildstate
?????文件????????1108??2019-12-17?19:24??final\Debug\final.tlog\li
?????文件????????3230??2019-12-17?19:24??final\Debug\final.tlog\li
?????文件?????????396??2019-12-17?19:24??final\Debug\final.tlog\li
............此處省略28個文件信息
- 上一篇:畢業設計智能小車的制作藍牙控制,避障,循跡.rar
- 下一篇:拼圖小游戲
評論
共有 條評論