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

  • 大小: 45KB
    文件類型: .rar
    金幣: 2
    下載: 1 次
    發布日期: 2021-07-31
  • 語言: C/C++
  • 標簽: 編譯原理??C0??PL/0??

資源簡介

本實驗是根據張素琴的編譯原理第二版的PL/0實驗改寫的C語言編譯器。

資源截圖

代碼片段和文件信息

/*?
Windows?下c語言PL/0編譯程序
在Visual?C++?6.0和Visual?C.NET上運行通過
使用方法:
運行后輸入PL/0源程序文件名
回答是否輸出虛擬機代碼
回答是否輸出名字表
fa.tmp輸出虛擬機代碼
fa1.tmp輸出源文件及其各行對應的首地址
fa2.tmp輸出結果
fas.tmp輸出名字表
*/

#include?
#include?“c0.h“
#include?“string.h“
/*?解釋執行時使用的棧?*/
#define?stacksize?500?
int?main()
{
init(); /*?初始化?*/
fas=fopen(“fas.tmp““w“);
fa1=fopen(“fa1.tmp““w“);
printf(“請輸入要編譯的c0程序所在的文件:“);
fprintf(fa1“Input?file??“);
scanf(“%s“fname); /*?輸入文件名?*/
fin=fopen(fname“r“);
if(fin)
{
fprintf(fa1“%s\n“fname);
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‘);
err=0;
cc=cx=ll=0;
ch=‘?‘;
kk=al-1;?//al是字符的最大長度?13

if(-1!=getsym())
{
fa=fopen(“fa.tmp““w“);
fa2=fopen(“fa2.tmp““w“);

if(-1==block(000)) /*?調用編譯程序?*/
{
fclose(fa);
fclose(fa1);
fclose(fin);
printf(“\n“);
return?0;
}
fclose(fa);
fclose(fa1);
if(sym!=rbparen)error(9);
if(err==0)
{
interpret(); /*?調用解釋執行程序?*/
}
else
{
printf(“Errors?in?c0?program“);
}
}
fclose(fin);
}
else
{
printf(“Can‘t?open?file!\n“);
fprintf(fa1“Can‘t?open?file!\n“);
fclose(fa1);
}
fclose(fas);
printf(“\n“);
return?0;
}




/*在適當的位置顯示錯誤*/
void?error(int?n)
{
char?space[81];

space[cc-1]=0;?/*?出錯時當前符號已經讀完,所以cc-1?*/?
printf(“****%s!%d\n“spacen);
fprintf(fa1“****%s!%d\n“spacen);
err++;

}

/*?詞法分析,獲取一個符號?*/
int?getsym()
{
int?ijk;
while(ch==‘?‘||ch==10||ch==9) /*?忽略空格、換行和TAB?*/
{
getchdo;
}
if(ch>=‘a‘&&ch<=‘z‘)
{
/*?名字或保留字以a..z開頭?*/
k=0;
do
{
if(k {
a[k]=ch;
k++;
}
getchdo;
}
while(ch>=‘a‘&&ch<=‘z‘||ch>=‘0‘&&ch<=‘9‘);
a[k]=0;//ASCII碼0表示停止
strcpy(ida);//id為當前ident
i=0;
j=norw-1;//norw為關鍵字個數9個
do?/*?搜索當前符號是否為保留字?*/
{
k=(i+j)/2;
if(strcmp(idword[k])<=0)j=k-1;
if(strcmp(idword[k])>=0)i=k+1;
}
while(i<=j);
if(i-1>j)sym=wsym[k];?
else?sym=ident;?/*?搜索失敗則,是名字或數字?*/
}
else
{
if(ch>=‘0‘&&ch<=‘9‘)
{ /*?檢測是否為數字:以0..9開頭?*/
k=0;
num=0;
sym=number;
do
{
num=10*num+ch-‘0‘;
k++;
getchdo;
}
while(ch>=‘0‘&&ch<=‘9‘);?/*?獲取數字的值?*/
k--;
if(k>nmax)error(30);//nmax表示數字最大位數14
}
else
{
if(ch==‘=‘) /*?檢測賦值符號?*/
{
sym=becomes;
getchdo;

}
else
{
if(ch==‘<‘) /*?檢測小于或小于等于符號?*/
{
getchdo;
if(ch==‘=‘)
{
sym=leq;//小于等于
getchdo;
}
else
{
sym=lss;//小于
}
}
else
{
if(ch==‘>‘) /*?檢測大于或大于等于符號?*/
{
getchdo;
if(ch==‘=‘)
{
sym=geq;//大于等于
getchdo;
}
else
{
sym=gtr;//大于
}
}
else

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

?????文件???????3555??2015-01-04?19:43??c0.h

?????文件??????23596??2015-01-08?11:44??c0.c

?????文件????????258??2015-01-04?17:56??c0.1.txt

?????文件?????204866??2015-01-08?10:28??c0.exe

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

???????????????232275????????????????????4


評論

共有 條評論