資源簡(jiǎn)介
一.課程設(shè)計(jì)目的
在分析理解一個(gè)教學(xué)型編譯程序(如PL/0)的基礎(chǔ)上,對(duì)其詞法分析程序、語法分析程序和語義處理程序進(jìn)行部分修改擴(kuò)充。
二.課程設(shè)計(jì)要求
1. 基本內(nèi)容
(1)擴(kuò)充賦值運(yùn)算:+= 和 -=
(2)擴(kuò)充語句(Pascal的FOR語句):
①FOR := TO DO
②FOR := DOWNTO DO
其中,語句①的循環(huán)變量的步長(zhǎng)為2,
語句②的循環(huán)變量的步長(zhǎng)為-2。
2. 選做內(nèi)容
(1)增加運(yùn)算:++ 和 --。
(2)增加類型:① 字符類型; ② 實(shí)數(shù)類型。
(3)擴(kuò)充函數(shù):① 有返回值和返回語句;② 有參數(shù)函數(shù)。
(4)增加一維數(shù)組類型(可增加指令)。
(5)其他典型語言設(shè)施。
3.本人在課程設(shè)計(jì)中已實(shí)現(xiàn)的功能
(1)增加單詞:保留字 ELSE,F(xiàn)OR,TO,DOWNTO, REPEAT, UNTIL, RETURN
運(yùn)算符 +=,-=,++,--
(2)修改單詞:不等號(hào)# 改為
(3)增加條件語句的ELSE子句
(4)擴(kuò)充賦值運(yùn)算:+= 和 -=
(5)擴(kuò)充語句
①FOR := TO DO
②FOR := DOWNTO DO
(6)增加運(yùn)算:++ 和 --(包括前后++、--運(yùn)算)
(7)增加一維數(shù)組類型
(8) 其他典型語言設(shè)施:REPEAT 語句 UNTIL 語句

代碼片段和文件信息
//A.2?????C??????版???本
/*編譯和運(yùn)行環(huán)境:
*1Visual?C++6.0VisualC++.NET?and?Visual?C++.NET?2003
*WinNT?Win?200?WinXP?and??Win2003?
*2?gcc?version?3.3.2??20031022(Red?Hat?Linux?3.3.2-1)
*Redhat?Fedora?core?1
*Intel?32?platform
*使用方法:
*運(yùn)行后輸入PL/0?源程序文件名
*回答是否輸出虛擬機(jī)代碼
*回答是否輸出名字表
*fa.tmp?輸出虛擬機(jī)代碼
*fa1.tmp??輸出源文件及其各行對(duì)應(yīng)的首地址
*fa2.tmp??輸出結(jié)果?
*fas.tmp??輸出名字表
*/
#include
#include?
#include
#include“pl0.h“
#include“string.h“
/*解釋執(zhí)行時(shí)使用的棧*/
#define?stacksize?500
int?main()
{
bool?nxtlev[symnum];
printf(“\n????????**************?????????????編譯原理實(shí)驗(yàn)??????????******************\n“);
printf(“\n??????****??班別:08計(jì)算機(jī)科學(xué)與技術(shù)2班??姓名:蔡謀善??學(xué)號(hào):3108006465?****\n\n“);?
printf(“??????*???????????????????開始調(diào)試代碼時(shí)間:1月2號(hào)?????????????????????????*??\n“);
printf(“??????*???????????????????完成調(diào)試代碼時(shí)間:1月9號(hào)?????????????????????????*??\n“);
????printf(“??????*????????????????????????????????????????????????????????????????????*??\n“);
printf(“\n??????**********************************************************************\n“);
printf(“\n請(qǐng)輸入PL/0文件路徑>>“);
scanf(“%s“fname);?????????????????????????????????????/*輸入文件名*/
fin=fopen(fname“r“);
//fin=fopen(“05.txt““r“);
if(fin)
{
printf(“是否輸出虛擬機(jī)代碼?(Y/N)“);????????????????//是否輸出虛擬機(jī)代碼
scanf(“%s“fname);
listswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
printf(“是否輸出名字表??(Y/N)“);?????????????//是否輸出名字表
scanf(“%s“fname);
tableswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
fa1=fopen(“fa1.tmp““w“);
printf(“\n\n輸出源文件及其各行對(duì)應(yīng)的首地址:\n“);
fprintf(fa1“輸出源文件及其各行對(duì)應(yīng)的首地址:\n“);
init();??????????????????????????????????????????/*初始化*/
err=0;
cc=cx=ll=0;
ch=‘?‘;
/*
//***************************************
//詞法分析程序
getsym();
while(sym!=period)
{
printf(“%s??“symout[sym]);
if(sym==ident)
printf(“%s??“id);
else?if(sym==number)
printf(“%d??“num);
getsym();
}
//******************************************
*/
if(-1!=getsym())
{
fa=fopen(“fa.tmp““w“);
fas=fopen(“fas.tmp““w“);
addset(nxtlevdeclbegsysstatbegsyssymnum);
nxtlev[period]=true;??
if(-1==block(00nxtlev)) //調(diào)用編譯程序
{
fclose(fa);
fclose(fa1);
fclose(fas);
fclose(fin);
printf(“\n“);
return?0;
}
fclose(fa);
fclose(fa1);
fclose(fas);
if(sym!=period)
{
error(9);
}
if(err==0)
{
time_t?timep;?
????????????????struct?tm?*p;
char?*wday[]={“Sun““Mon““Tue““Wed““Thu““Fri““Sat“};???
fa2=fopen(“fa2.tmp““w“); ??????????????????
????????????????time(&timep);?
????????????????p=gmtime(&timep);?
????????????????printf(“開始解釋執(zhí)行目標(biāo)代碼時(shí)間:?%d-%d-%d“(1900+p->tm_year)?(1+p->tm_mon)p->tm_mday);?
????????????????printf(“?%s?%d:%d:%d\n“?wday[p->tm_wday]?p->tm_hour?p->tm_min?p->tm_sec);?
interpret();
printf(“完成解釋執(zhí)行目標(biāo)代碼時(shí)間:?%d-%d-%d“(1900+p->tm_year)?(1+p->tm_mon)p->tm_mday);?
????????????????printf(“?%s?%d:%d:%d\n“?wday[
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????218??2009-01-06?17:44??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\ARRAY.PL0
?????文件?????????95??2011-01-08?23:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\ELSE.PL0
?????文件????????187??2011-01-09?21:03??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\fa.tmp
?????文件????????105??2011-01-09?21:03??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\fa1.tmp
?????文件?????????68??2011-01-09?21:03??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\fa2.tmp
?????文件?????????21??2011-01-09?21:03??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\fas.tmp
?????文件?????????60??2011-01-09?21:03??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\FORDOWNTO.PL0
?????文件?????????53??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\FORTO.PL0
?????文件?????233560??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\PL0.exe
?????文件????????111??2011-01-09?01:44??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\REPEAT.PL0
?????文件????????114??2011-01-09?00:06??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼\YUNSUAN.PL0
?????目錄??????????0??2011-01-08?15:35??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\測(cè)試代碼
?????文件?????233560??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\PL0.exe
?????文件?????294652??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\PL0.ilk
?????文件??????96596??2011-01-09?20:57??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\PL0.obj
?????文件?????255556??2011-01-08?23:55??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\PL0.pch
?????文件?????574464??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\PL0.pdb
?????文件??????41984??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\vc60.idb
?????文件??????53248??2011-01-09?20:57??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug\vc60.pdb
?????目錄??????????0??2011-01-08?23:53??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\Debug
?????文件??????53598??2011-01-09?20:57??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.cpp
?????文件???????3365??2011-01-09?20:57??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.dsp
?????文件????????531??2011-01-09?22:08??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.dsw
?????文件?????233560??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.exe
?????文件???????7238??2011-01-09?21:11??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\pl0.h
?????文件??????41984??2011-01-09?01:23??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.ncb
?????文件??????48640??2011-01-09?22:08??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.opt
?????文件????????731??2011-01-09?20:58??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序\PL0.plg
?????目錄??????????0??2011-03-18?13:32??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\源程序
?????文件????2410496??2011-03-18?13:32??編譯原理課程設(shè)計(jì)\課程設(shè)計(jì)\課程設(shè)計(jì)報(bào)告.doc
............此處省略5個(gè)文件信息
評(píng)論
共有 條評(píng)論