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

代碼片段和文件信息
//A.2?????C??????版???本
/*編譯和運行環境:
*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
*使用方法:
*運行后輸入PL/0?源程序文件名
*回答是否輸出虛擬機代碼
*回答是否輸出名字表
*fa.tmp?輸出虛擬機代碼
*fa1.tmp??輸出源文件及其各行對應的首地址
*fa2.tmp??輸出結果?
*fas.tmp??輸出名字表
*/
#include
#include?
#include
#include“pl0.h“
#include“string.h“
/*解釋執行時使用的棧*/
#define?stacksize?500
int?main()
{
bool?nxtlev[symnum];
printf(“\n????????**************?????????????編譯原理實驗??????????******************\n“);
printf(“\n??????****??班別:08計算機科學與技術2班??姓名:蔡謀善??學號:3108006465?****\n\n“);?
printf(“??????*???????????????????開始調試代碼時間:1月2號?????????????????????????*??\n“);
printf(“??????*???????????????????完成調試代碼時間:1月9號?????????????????????????*??\n“);
????printf(“??????*????????????????????????????????????????????????????????????????????*??\n“);
printf(“\n??????**********************************************************************\n“);
printf(“\n請輸入PL/0文件路徑>>“);
scanf(“%s“fname);?????????????????????????????????????/*輸入文件名*/
fin=fopen(fname“r“);
//fin=fopen(“05.txt““r“);
if(fin)
{
printf(“是否輸出虛擬機代碼?(Y/N)“);????????????????//是否輸出虛擬機代碼
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輸出源文件及其各行對應的首地址:\n“);
fprintf(fa1“輸出源文件及其各行對應的首地址:\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)) //調用編譯程序
{
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(“開始解釋執行目標代碼時間:?%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(“完成解釋執行目標代碼時間:?%d-%d-%d“(1900+p->tm_year)?(1+p->tm_mon)p->tm_mday);?
????????????????printf(“?%s?%d:%d:%d\n“?wday[
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????218??2009-01-06?17:44??編譯原理課程設計\課程設計\測試代碼\ARRAY.PL0
?????文件?????????95??2011-01-08?23:58??編譯原理課程設計\課程設計\測試代碼\ELSE.PL0
?????文件????????187??2011-01-09?21:03??編譯原理課程設計\課程設計\測試代碼\fa.tmp
?????文件????????105??2011-01-09?21:03??編譯原理課程設計\課程設計\測試代碼\fa1.tmp
?????文件?????????68??2011-01-09?21:03??編譯原理課程設計\課程設計\測試代碼\fa2.tmp
?????文件?????????21??2011-01-09?21:03??編譯原理課程設計\課程設計\測試代碼\fas.tmp
?????文件?????????60??2011-01-09?21:03??編譯原理課程設計\課程設計\測試代碼\FORDOWNTO.PL0
?????文件?????????53??2011-01-09?20:58??編譯原理課程設計\課程設計\測試代碼\FORTO.PL0
?????文件?????233560??2011-01-09?20:58??編譯原理課程設計\課程設計\測試代碼\PL0.exe
?????文件????????111??2011-01-09?01:44??編譯原理課程設計\課程設計\測試代碼\REPEAT.PL0
?????文件????????114??2011-01-09?00:06??編譯原理課程設計\課程設計\測試代碼\YUNSUAN.PL0
?????目錄??????????0??2011-01-08?15:35??編譯原理課程設計\課程設計\測試代碼
?????文件?????233560??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\Debug\PL0.exe
?????文件?????294652??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\Debug\PL0.ilk
?????文件??????96596??2011-01-09?20:57??編譯原理課程設計\課程設計\源程序\Debug\PL0.obj
?????文件?????255556??2011-01-08?23:55??編譯原理課程設計\課程設計\源程序\Debug\PL0.pch
?????文件?????574464??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\Debug\PL0.pdb
?????文件??????41984??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\Debug\vc60.idb
?????文件??????53248??2011-01-09?20:57??編譯原理課程設計\課程設計\源程序\Debug\vc60.pdb
?????目錄??????????0??2011-01-08?23:53??編譯原理課程設計\課程設計\源程序\Debug
?????文件??????53598??2011-01-09?20:57??編譯原理課程設計\課程設計\源程序\PL0.cpp
?????文件???????3365??2011-01-09?20:57??編譯原理課程設計\課程設計\源程序\PL0.dsp
?????文件????????531??2011-01-09?22:08??編譯原理課程設計\課程設計\源程序\PL0.dsw
?????文件?????233560??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\PL0.exe
?????文件???????7238??2011-01-09?21:11??編譯原理課程設計\課程設計\源程序\pl0.h
?????文件??????41984??2011-01-09?01:23??編譯原理課程設計\課程設計\源程序\PL0.ncb
?????文件??????48640??2011-01-09?22:08??編譯原理課程設計\課程設計\源程序\PL0.opt
?????文件????????731??2011-01-09?20:58??編譯原理課程設計\課程設計\源程序\PL0.plg
?????目錄??????????0??2011-03-18?13:32??編譯原理課程設計\課程設計\源程序
?????文件????2410496??2011-03-18?13:32??編譯原理課程設計\課程設計\課程設計報告.doc
............此處省略5個文件信息
評論
共有 條評論