91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 146KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-07-05
  • 語言: 其他
  • 標簽: 編譯原理??

資源簡介

帶說明文檔的編譯原理課程設計,PL0語言可看成是Pascal [1] 語言的子集,它的編譯程序是一個編譯解釋執行系統。

資源截圖

代碼片段和文件信息

#include
#include
#include“PL0.h“
#include

//運行時的數據棧大小,在interpret函數中出現
#define?stacksize?500

/*********************************************************************************
**??在看源程序之前,請始終記住??????????????????????????????**
**??sym表示的是當前字符串的類型,???????????????????????????**
**??num表示的數字,?????????????????????????????????????????**
**??id中存放的是字符串,????????????????????????????????????**
**??記住這點在看源程序的時候非常重要。??????????????????????**
**??另外,還要記住的是nxtlev數組中存放的是后繼符號集????????**
**********************************************************************************/

int?main()
{
bool?nxtlev[symnum];//這個數組表示的是當前語句的后繼符號集合,一共有32個
printf(“Input?pl/0?file?“);//輸入文件的路徑
scanf(“%s“?fname);
fin?=?fopen(fname?“r“);//以只讀打開文件,fin文件指針
if?(fin)
{
printf(“List?object?code??(Y/N)“);
scanf(“%s“?fname);
listswitch?=?(fname[0]?==?‘y‘?||?fname[0]?==?‘Y‘);//listswitch用于列舉代碼

printf(“List?symbol?table??(Y/N)“);
scanf(“%s“?fname);
tableswitch?=?(fname[0]?==?‘y‘?||?fname[0]?==?‘Y‘);//tableswitch表示是否輸出table表
???//該表類似于22頁的表

fa1?=?fopen(“fa1.tmp“?“w“);//以可寫方式打開文件,對于本程序其實是新建一個文件,fa1文件中存儲的是源程序
fprintf(fa1?“Input?pl/0?file?“);//將“Input?pl/0?file?“輸入文件中
fprintf(fa1?“%s\n“?fname);//同上

init();?//初始化

err?=?0;
cc?=?cx?=?ll?=?0;
ch?=?‘?‘;

if?(-1?!=?getsym())
{
//如果程序開始是對的,則往下執行
//fa存放的是模擬程序的代碼
//fas存放的是table表中的數據

fa?=?fopen(“fa.tmp“?“w“);//以可寫形式打開
fas?=?fopen(“fas.tmp“?“w“);//同上
addset(nxtlev?declbegsys?statbegsys?symnum);//symnum=32,初始化后繼符號集一共有32個,即nxtlev數組
nxtlev[period]?=?true;//整個程序可以只有一個‘.‘,即程序是空的也可以

//block是編譯程序的主程序,是分程序的分析處理過程,其里面調用了大部分程序
//耐心看
//請記住在block程序開始的時候,只讀取了源程序的一個語句單位

/*調用編譯程序*/
if?(-1?==?block(0?0?nxtlev))?????????
{
//當程序出錯的時候,則關閉以下文件,并退出程序
fclose(fa);//fa輸出虛擬機代碼
fclose(fa1);//輸出源文件及其各行對應的首地址
fclose(fas);//輸出名字表
fclose(fin);
printf(“\n“);
return?0;
}
fclose(fa);
fclose(fa1);
fclose(fas);


//如果在源程序的結尾沒有‘.‘,則報錯
if?(sym?!=?period)
{
error(9);
}

//err=0表示源程序沒有錯誤
if?(err?==?0)
{

fa2?=?fopen(“fa2.tmp“?“w“);//打開fa2文件,依次執行里面的語句,輸出源程序結果

interpret();????????????????//模擬計算機執行源程序

fclose(fa2);
}
else
{
printf(“Errors?in?pl/0?program“);?????//如果源程序有錯的話,會這樣
}
}
fclose(fin);
}
else
{
printf(“Can‘t?open?file!?\n“);
}
printf(“\n“);
system(“pause“);
return?0;
}

/*?初始化*/
void?init()
{
int?i;
/*設置單字符符號*/
for?(i?=?0;?i?<=?255;?i++)
{
ssym[i]?=?nul;//nul為0,將ssym初始化為0
}
//ssym大小為256,可以表示所有的ASCLL碼,enum?symbol枚舉
ssym[‘+‘]?=?plus;
ssym[‘-‘]?=?minus;
ssym[‘*‘]?=?times;
ssym[‘/‘]?=?slash;
ssym[‘(‘]?=?lparen;
ssym[‘)‘]?=?rparen;
ssym[‘=‘]?=?eql;
ssym[‘‘]?=?comma;
ssym[‘.‘]?=?period;
ssym[‘#‘]?=?neq;
ssym[‘;‘]?=?semicolon;
ssym[‘[‘]?=?lbracket;?/*添加左括號?[?*/
ssym[‘]‘]?=?rbracket;?/*添加右括號?]?*/


?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????211??2017-07-14?09:46??對PL0語言及其編譯器進行擴充和修改\測試文件\test1.txt

?????文件????????194??2017-07-14?16:48??對PL0語言及其編譯器進行擴充和修改\測試文件\test2.txt

?????文件????????211??2017-07-14?16:50??對PL0語言及其編譯器進行擴充和修改\測試文件\test3.txt

?????文件??????40496??2017-07-14?09:42??對PL0語言及其編譯器進行擴充和修改\源程序\pl0.cpp

?????文件???????6200??2017-07-13?09:23??對PL0語言及其編譯器進行擴充和修改\源程序\pl0.h

?????文件?????141596??2018-05-13?19:33??對PL0語言及其編譯器進行擴充和修改\編譯原理課程設計說明書.docx

?????目錄??????????0??2018-05-13?19:32??對PL0語言及其編譯器進行擴充和修改\測試文件

?????目錄??????????0??2018-05-13?19:32??對PL0語言及其編譯器進行擴充和修改\源程序

?????目錄??????????0??2018-05-13?19:34??對PL0語言及其編譯器進行擴充和修改

-----------?---------??----------?-----??----

???????????????188908????????????????????9


評論

共有 條評論