資源簡(jiǎn)介
語(yǔ)義分析 編譯原理 語(yǔ)義分析 編譯原理 語(yǔ)義分析 編譯原理

代碼片段和文件信息
#include
#include
#include?
char?prog[80]token[8];
char?ch;
int?synpmnsum;
int?kk=0iiNnn=0;
int?k=0ti=0;
char?tt;
char?*?rwtab[6]?=?{“begin““if““then““while““do““end“};
int?scaner();
int?lrparser();
int?statement();
int?yucu();
char?*term();
char?*factor();
char?*expression();
void?emit();
struct
{
char?resulted[8];
char?ag1ed[8];
char?oped[8];
char?ag2ed[8];
}quad[20];
void?main()
{
p=0;
printf(“\n?please?input?string:?\n“);
do
{
scanf(“%c“&ch);
prog[p++]=ch;
}while(ch?!=?‘#‘);
p=0;
scaner();
lrparser();
}
char?*?newtemp(?void)
{
char?*?P;
char?M[8];
P?=?(char?*)malloc(8);
k++;
itoa(kM10);
strcpy(P+1M);
P[0]?=?‘t‘;
return(P);
}
int?lrparser()
{
int?schain?=?0;
kk?=?0;
if(syn?==?1)
{
scaner();
schain?=?yucu();
if(syn?=?6)
{
scaner();
if(syn?==?0?&&?(kk?==?0))
printf(“success“);
}
else?
{
if(kk!=1)
printf(“缺end錯(cuò)誤“);
kk=1;
}
}
else
{
printf(“begin錯(cuò)誤“);
kk=1;
}
return(schain);
}
int?yucu()
{
int?schain?=?0;
schain?=?statement();
while?(syn?==?26)
{
scaner();
schain?=?statement();
}
return(schain);
}
int?statement()
{
char?tt[8]eplace[8];
int?schain?=?0;
switch(syn)
{
case?10:
strcpy(tttoken);
scaner();
if(syn?==?18)
{
scaner();
strcpy(eplaceexpression());
emit(tteplace““““);
schain?=?0;
}
else
{
printf(“缺少賦值號(hào)“);
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(eplaceterm());
while(syn?==?13?||?syn?==?14)
{
strcpy(tttoken);
scaner();
strcpy(ep2term());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return(eplace);
}
char?*?term(void)
{
char?*?tp*?ep2*?eplace*?tt;
tp?=?(char?*)malloc(12);
ep2?=?(char?*)malloc(12);
eplace?=?(char?*)malloc(12);
tt?=?(char?*)malloc(12);
strcpy(eplacefactor());
while(syn?==?15?||?syn?==?16)
{
strcpy(tttoken);
scaner();
strcpy(ep2factor());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return(eplace);
}
char?*?factor(void)
{
char?*?fplace;
fplace?=?(char?*)malloc(12);
strcpy(fplace“?“);
if(syn?==?10)
{
strcpy(fplacetoken);
scaner();
}
else?if?(syn?==?11)
{
itoa(sumfplace10);
scaner();
}
else?if(syn?==?27)
{
scaner();
strcpy(fplaceexpression());
if(syn?==?28)
scaner();
else
{
printf(“‘)‘錯(cuò)誤“);
kk=1;
}
}
else
{
printf(“‘(‘錯(cuò)誤“);
kk=1;
}
return(fplace);
}
void?emit(char?*?resultchar?*?ag1char?*?opchar?*?ag2)
{
strcpy(quad[nn].resultedresult);
strcpy(quad[nn].ag1edag1);
strcpy(quad[nn].opedop);
strcpy(quad[nn].ag2edag2);
printf(“(%d)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????33792??2008-12-22?19:19??語(yǔ)義分析\Debug\vc60.idb
?????文件??????45056??2008-12-22?19:19??語(yǔ)義分析\Debug\vc60.pdb
?????文件?????192597??2008-12-22?19:19??語(yǔ)義分析\Debug\yyfx.exe
?????文件?????187932??2008-12-22?19:19??語(yǔ)義分析\Debug\yyfx.ilk
?????文件??????18376??2008-12-22?19:19??語(yǔ)義分析\Debug\yyfx.obj
?????文件?????190640??2008-12-22?19:19??語(yǔ)義分析\Debug\yyfx.pch
?????文件?????369664??2008-12-22?19:19??語(yǔ)義分析\Debug\yyfx.pdb
?????文件???????4639??2008-12-02?10:24??語(yǔ)義分析\yyfx.c
?????文件???????3375??2008-12-22?19:19??語(yǔ)義分析\yyfx.dsp
?????文件????????516??2008-12-22?19:20??語(yǔ)義分析\yyfx.dsw
?????文件??????33792??2008-12-22?19:20??語(yǔ)義分析\yyfx.ncb
?????文件??????48640??2008-12-22?19:20??語(yǔ)義分析\yyfx.opt
?????文件???????1423??2008-12-22?19:19??語(yǔ)義分析\yyfx.plg
?????文件??????77312??2008-12-02?11:44??語(yǔ)義分析\語(yǔ)義分析實(shí)驗(yàn)報(bào)告200631000715劉明志.doc
?????目錄??????????0??2008-12-22?19:19??語(yǔ)義分析\Debug
?????目錄??????????0??2008-12-22?19:20??語(yǔ)義分析
-----------?---------??----------?-----??----
??????????????1207754????????????????????16
- 上一篇:cadence運(yùn)算放大器的仿真
- 下一篇:醫(yī)院選址問(wèn)題
評(píng)論
共有 條評(píng)論