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

資源簡介

附錄c 編譯程序實驗 實驗目的:用c語言對一個簡單語言的子集編制一個一遍掃描的編譯程序,以加深對編譯原理的理解,掌握編譯程序的實現方法和技術。 語法分析 C2.1 實驗目的 編制一個遞歸下降分析程序,實現對詞法分析程序所提供的單詞序列的語法檢查和結構分析. C2.2 實驗要求 利用C語言編制遞歸下降分析程序,并對簡單語言進行語法分析. C2.2.1待分析的簡單語言的語法 實驗目的 通過上機實習,加深對語法制導翻譯原理的理解,掌握將語法分析所識別的語法成分變換為中間代碼的語義翻譯方法. 實驗要求 采用遞歸下降語法制導翻譯法,對算術表達式、賦值語句進行語義分析并生成四元式序列。 實驗的輸入和輸出 輸入是語法分析提供的正確的單詞串,輸出為三地址指令形式的四元式序列。 例如:對于語句串 begin a:=2+3*4;x:=(a+b)/c end# 輸出的三地址指令如下: (1) t1=3*4 (2) t2=2+t1 (3) a=t2 (4) t3=a+b (5) t4=t3/c (6) x=t4 算法思想 1設置語義過程 (1) emit(char *result,char *arg1,char *op,char *ag2) 該函數功能是生成一個三地址語句送到四元式表中。 四元式表的結構如下: struct {char result[8]; char ag1[8]; char op[8]; char ag2[8]; }quad[20]; (2)char *newtemp() 該函數回送一個新的臨時變量名,臨時變量名產生的順序為T1,T2,…. Char *newtemp(void) { char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } (2)主程序示意圖如圖c.10所示。 (2) 函數lrparser在原來語法分析的基礎上插入相應的語義動作:將輸入串翻譯成四元式序列。在實驗中我們只對表達式、賦值語句進行翻譯。 語義分析程序的C語言程序框架 int lrparser() { int schain=0; kk=0; if(syn=1) { 讀下一個單詞符號; schain=yucu; /調用語句串分析函數進行分析/ if(syn=6) { 讀下一個單詞符號; if(syn=0 && (kk==0)) 輸出(“success”); } else { if(kk!=1 ) 輸出 ‘缺end’ 錯誤;kk=1;} else{輸出’begin’錯誤;kk=1;} } return(schain); int yucu() { int schain=0; schain=statement();/調用語句分析函數進行分析/ while(syn=26) {讀下一個單詞符號; schain=statement(); /調用語句分析函數進行分析/ } return(schain); } int statement() { char tt[8],eplace[8]; int schain=0; {switch(syn) {case 10: strcpy(tt,token); scanner(); if(syn=18) {讀下一個單詞符號; strcpy(eplace,expression()); emit(tt,eplace,””,””); schain=0; } else {輸出’缺少賦值號’的錯誤;kk=1; } return(schain); break; } } char *expression(void) {char *tp,*ep2,*eplace,*tt; tp=(char *)malloc(12);/分配空間/ ep2=(char *)malloc(12); eplace=(char *)malloc(12); tt =(char )malloc(12); strcpy(eplace,term ());/調用term分析產生表達式計算的第一項eplace/ while(syn=13 or 14) { 操作符 tt= ‘+’或者‘—’; 讀下一個單詞符號; strcpy(ep2,term());/調用term分析產生表達式計算的第二項ep2/ strcpy(tp,newtemp());/調用newtemp產生臨時變量tp存儲計算結果/ emit(tp,eplace,tt,ep2);/生成四元式送入四元式表/ strcpy(eplace,tp); } return(eplace); } char *term(void)/仿照函數expression編寫/ char *factor

資源截圖

代碼片段和文件信息


#include??
#include??

char?prog[80]token[8];?
char?ch;?
int?synpmnsum;?
char?*rwtab[6]={“begin““if““then““while““do““end“};?

void?scaner();?

void?main(){?
p=0;?
printf(“\n?please?input?string;\n“);?
do?{?
scanf(“%c“&ch);?
prog[p++]?=?ch;?
}while?(ch!=‘#‘);?
p=0;?
do{?
scaner();?
switch(syn)?{?
case?11:?printf?(“(syn%d)\n“sum);?break;?
case?-1:printf(“error!\n“);break;?
default:printf(“(%d%s)\n“syntoken);?
}?
}while?(syn!=0);?
}?

void?scaner(){?
for(n=0;n<8;n++)?token[n]=NULL;?
ch?=?prog[p++];?
while(ch==‘?‘)?
ch?=?prog[p++];?
if(ch>=‘a‘&&ch<=‘z‘){?
m?=?0;?
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘)){?
token[m++]?=?ch;?
ch?=?prog[p++];?
}?
token[m++]=‘\0‘;?
--p;?
syn=10;?
for?(n=0;n<6;n++)?
if(strcmp(tokenrwtab[n])==0){?
syn?=?n+1;?
break;?
}?
}?
else?
if(ch>=‘0‘&&ch<=‘9‘){?
while?(ch>=‘0‘&&ch<=‘9‘){?
sum=sum*10+ch-‘0‘;?
ch?=?prog[p++];?
}?
--p;?
syn=11;?
}?
else?
switch(ch){?
case‘<‘:?
m=0;token[m++]=ch;?
ch?=?prog[p++];?
if(ch==‘>‘){?
syn=21;?
token[m++]=ch;?
}?
else?
if?(ch==‘=‘){?
syn=22;?
token[m++]=ch;?
}?
else{?
syn=20;?
--p;?
}?
break;?
case‘>‘:?
token[m++]?=?ch;?
ch?=?prog[p++];?
if(ch==‘=‘){?
syn?=?24;?
token[m++]?=?ch;?
}?
else?{?
syn?=?23;?
--p;?
}?
break;?
case‘:‘:?
token[m++]?=?ch;?
ch?=?prog[p++];?
if(ch==‘=‘){?
syn?=?18;?
token[m++]?=?ch;?
}?
else?{?
syn?=?17;?
--p;?
}?
break;?
case‘+‘:?
syn=13;token[0]=ch;break;?
case‘-‘:?
syn=14;token[0]=ch;break;?
case‘*‘:?
syn=15;token[0]=ch;break;?
case‘/‘:?
syn=16;token[0]=ch;break;?
case‘=‘:?
syn=25;token[0]=ch;break;?
case‘;‘:?
syn=26;token[0]=ch;break;?
case‘(‘:?
syn=27;token[0]=ch;break;?
case‘)‘:?
syn=28;token[0]=ch;break;?
case‘#‘:?
syn=0;token[0]=ch;break;?
default:?
syn=-1;?
}?
}





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

?????文件???????1844??2008-10-27?21:44??編譯原理\詞法分析實驗\1_2\1_2.cpp

?????文件???????3365??2008-10-28?14:20??編譯原理\詞法分析實驗\1_2\1_2.dsp

?????文件????????514??2008-10-28?15:14??編譯原理\詞法分析實驗\1_2\1_2.dsw

?????文件??????41984??2008-10-28?15:14??編譯原理\詞法分析實驗\1_2\1_2.ncb

?????文件??????48640??2008-10-28?15:14??編譯原理\詞法分析實驗\1_2\1_2.opt

?????文件???????1095??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\1_2.plg

?????文件?????167982??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\Debug\1_2.exe

?????文件?????186736??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\Debug\1_2.ilk

?????文件???????9620??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\Debug\1_2.obj

?????文件?????186924??2008-10-27?23:27??編譯原理\詞法分析實驗\1_2\Debug\1_2.pch

?????文件?????427008??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\Debug\1_2.pdb

?????文件??????33792??2008-10-28?14:20??編譯原理\詞法分析實驗\1_2\Debug\vc60.idb

?????文件??????45056??2008-10-27?23:31??編譯原理\詞法分析實驗\1_2\Debug\vc60.pdb

????..A..H.???????162??2008-10-27?20:32??編譯原理\詞法分析實驗\~$實驗設計模板.doc

?????文件??????36864??2007-07-25?19:42??編譯原理\詞法分析實驗\詞法分析.doc

?????文件??????60928??2008-10-28?10:58??編譯原理\詞法分析實驗\詞法分析實驗報告.doc

?????文件???????4673??2008-12-14?22:33??編譯原理\語義分析\3_1\1.cpp

?????文件???????3346??2008-12-14?22:42??編譯原理\語義分析\3_1\1.dsp

?????文件????????527??2008-12-14?22:42??編譯原理\語義分析\3_1\1.dsw

?????文件??????33792??2008-12-14?22:42??編譯原理\語義分析\3_1\1.ncb

?????文件??????48640??2008-12-14?22:42??編譯原理\語義分析\3_1\1.opt

?????文件???????1622??2008-12-14?22:41??編譯原理\語義分析\3_1\1.plg

?????文件??????98370??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\1.exe

?????文件??????51616??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\1.ilk

?????文件??????19088??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\1.obj

?????文件?????222996??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\1.pch

?????文件?????558080??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\1.pdb

?????文件??????33792??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\vc60.idb

?????文件??????45056??2008-12-14?22:41??編譯原理\語義分析\3_1\Debug\vc60.pdb

????..A.SH.??????7168??2008-12-14?21:03??編譯原理\語義分析\Thumbs.db

............此處省略40個文件信息

評論

共有 條評論