资源简介
编译原理实验 语义分析与中间代码生成
Sample语言的语义和代码生成规则,熟悉Sample语言的语义分析和代码生成过
代码片段和文件信息
/*
文法G(S)
S-->DGWE
G-->c=R
R-->dTe|d
T-->+|-|*|/
E-->aFb
F--> >|<
*/
#include
#include
#include
#include
char a[50]g[50][50]; //a[50]保存输入串g[50][50]保存四元式
char ch;
int i1=0i2=0i3=0; //i1通过自加来取得a[i1]输入串中的字符 i2用来选择用哪种四元式i3用来选择用‘W‘的报错
int total=0;
void S();
void D();
void G();
void W();
void E();
void R();
void T();
void F();
void main()
{
int pj=0;
char str[20];
printf(“请输入do-while语句(D代表doW代表while)并以#结束:\n“);
do{
scanf(“%s“str);
if(strcmp(str“do“)==0)
{
a[j]=‘D‘;
j++;
}
else if(strcmp(str“while“)==0)
{
a[j]=‘W‘;
j++;
}
else if(strcmp(str“c=d+e“)==0)
{
a[j]=‘c‘;
a[j+1]=‘=‘;
a[j+2]=‘d‘;
a[j+3]=‘+‘;
a[j+4]=‘e‘;
j=j+5;
continue;
}
else if(strcmp(str“c=d-e“)==0)
{
a[j]=‘c‘;
a[j+1]=‘=‘;
a[j+2]=‘d‘;
a[j+3]=‘-‘;
a[j+4]=‘e‘;
j=j+5;
continue;
}
else if(strcmp(str“c=d*e“)==0)
{
a[j]=‘c‘;
a[j+1]=‘=‘;
a[j+2]=‘d‘;
a[j+3]=‘*‘;
a[j+4]=‘e‘;
j=j+5;
continue;
}
else if(strcmp(str“c=d/e“)==0)
{
a[j]=‘c‘;
a[j+1]=‘=‘;
a[j+2]=‘d‘;
a[j+3]=‘/‘;
a[j+4]=‘e‘;
j=j+5;
continue;
}
else if(strcmp(str“a>b“)==0)
{
a[j]=‘a‘;
a[j+1]=‘>‘;
a[j+2]=‘b‘;
j=j+3;
continue;
}
else if(strcmp(str“a {
a[j]=‘a‘;
a[j+1]=‘>‘;
a[j+2]=‘b‘;
j=j+3;
continue;
}
else {
for(unsigned int i=0;i {
a[j+i]=str[i];
}
j=j+strlen(str);
}
}while(strcmp(str“#“)!=0);
printf(“\n“);
printf(“输入串变为%s\n“a);
printf(“\n“);
ch=a[0];
S();
if (ch==‘#‘)
{ printf(“accept\n“);
printf(“四元式为:\n“);
p=0;
for(;p {
printf(“10%d %s\n“pg[p]);
}
}
else {
printf(“error\n“);
printf(“回车返回\n“);
getchar();getchar();
return;
}
printf(“\n“);
printf(“回车返回\n“);
getchar();
getchar();
}
void S()
{
printf(“%d\tS-->DGWE\n“total);total++;//total用来记数
D();
G();
}
void D()
{
if(ch!=‘D‘)
{ printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
getchar();
getchar();
exit(1);}
ch=a[++i1];
}
void G()
{ int i=i1+1;
if(ch!=‘c‘)
{ printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
getchar();
getchar();
exit(1);}
if(a[i]!=‘=‘)
{ printf(“第%d个字符%c为有非法字符请按回车返回!!“i+1a[i]);
getchar();
getchar();
exit(1);}
printf(“%d\tG-->c=R\n“total);total++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 33792 2010-06-27 17:09 语义分析\Debug\vc60.idb
文件 45056 2010-06-27 16:58 语义分析\Debug\vc60.pdb
文件 192626 2010-06-27 16:58 语义分析\Debug\语义.exe
文件 189700 2010-06-27 16:58 语义分析\Debug\语义.ilk
文件 23491 2010-06-27 16:58 语义分析\Debug\语义.obj
I.A.... 227508 2010-06-27 16:58 语义分析\Debug\语义.pch
文件 369664 2010-06-27 16:58 语义分析\Debug\语义.pdb
I.A.... 5729 2010-06-27 16:54 语义分析\语义.cpp
文件 3379 2010-06-27 16:58 语义分析\语义.dsp
文件 533 2010-06-27 17:11 语义分析\语义.dsw
文件 41984 2010-06-27 17:39 语义分析\语义.ncb
文件 48640 2010-06-27 17:39 语义分析\语义.opt
文件 744 2010-06-27 16:58 语义分析\语义.plg
目录 0 2010-06-27 16:58 语义分析\Debug
目录 0 2010-06-27 17:39 语义分析
----------- --------- ---------- ----- ----
1182846 15
- 上一篇:通用电动车充电器的设计
- 下一篇:红外对管测量液滴速度药液不足报警+仿真
评论
共有 条评论