资源简介

语义分析 编译原理 语义分析 编译原理 语义分析 编译原理

资源截图

代码片段和文件信息

#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错误“);
kk=1;
}
}
else
{
printf(“begin错误“);
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(“缺少赋值号“);
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(“‘)‘错误“);
kk=1;
}
}
else
{
printf(“‘(‘错误“);
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)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2008-12-22 19:19  语义分析\Debug\vc60.idb

     文件      45056  2008-12-22 19:19  语义分析\Debug\vc60.pdb

     文件     192597  2008-12-22 19:19  语义分析\Debug\yyfx.exe

     文件     187932  2008-12-22 19:19  语义分析\Debug\yyfx.ilk

     文件      18376  2008-12-22 19:19  语义分析\Debug\yyfx.obj

     文件     190640  2008-12-22 19:19  语义分析\Debug\yyfx.pch

     文件     369664  2008-12-22 19:19  语义分析\Debug\yyfx.pdb

     文件       4639  2008-12-02 10:24  语义分析\yyfx.c

     文件       3375  2008-12-22 19:19  语义分析\yyfx.dsp

     文件        516  2008-12-22 19:20  语义分析\yyfx.dsw

     文件      33792  2008-12-22 19:20  语义分析\yyfx.ncb

     文件      48640  2008-12-22 19:20  语义分析\yyfx.opt

     文件       1423  2008-12-22 19:19  语义分析\yyfx.plg

     文件      77312  2008-12-02 11:44  语义分析\语义分析实验报告200631000715刘明志.doc

     目录          0  2008-12-22 19:19  语义分析\Debug

     目录          0  2008-12-22 19:20  语义分析

----------- ---------  ---------- -----  ----

              1207754                    16


评论

共有 条评论