1 / 18
文档名称:

语法分析实验报告(实验二).docx

格式:docx   大小:513KB   页数:18页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

语法分析实验报告(实验二).docx

上传人:cby201601 2022/1/17 文件大小:513 KB

下载得到文件列表

语法分析实验报告(实验二).docx

文档介绍

文档介绍:编译原理语法分析实验报告
软工082班
兰洁
2
一、实验内容
二、实验目的
三、实验要求
四、程序流程图
主函数;
scanner。;
irparser()函数
yucu()/*语句串分析*/
statement。||(ch<='Z'&&ch>='A'))
{while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')){token[m++]=ch;
ch=prog[p++];
}
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0){syn=n+1;
}
}
break;
token[m++]='\0';}
else
if(ch<='9'&&ch>='0')
{sum=0;
while(ch<='9'&&ch>='0')
{sum=sum*10+ch-'0';
ch=prog[p++];
}
syn=11;
}
else
{switch(ch)
{case'<':m=0;token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{syn=22;
token[m+1]=ch;}
else
{syn=20;ch=prog[--p];}
break;
case'>':m=0;token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{syn=24;
token[m++]=ch;
}
else
{syn=23;p--;
break;
case'=':m=0;token[m++]=ch;
ch=prog[p++];
}
}
if(ch=='=')
{syn=25;
token[m++]=ch;
}
else
{syn=18;
ch=prog[--p];
}
break;
case'!':m=0;token[m++]=ch;
ch=prog[++p];
if(ch=='=')
{syn=22;
token[m++]=ch;
}
else
syn=-1;
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=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;〃break;
ch=prog[p++];
}
voidirparser()
{if(syn==1)
{scaner();yucu();/*语句串分析*/if(syn==6)/*读至Uendfunc*/
{scaner();
if(syn==0&&kk==0)/*程序分析识别完*/
printf("success");
}
else
{if(kk!=1)/*没以endfunc结束*/
{printf("error!need'endfunc'");
kk=1;
}
}
}else
{printf("error!need'function'");
kk=1;
}
}
voidyucu()/*语句串分析*/
{statement。;/*调用语句分析函数*/
while(syn==26)/*一个语句识别结束,继续识别*/
{scaner();
statement。;
}
return;
}
voidstatement。/*语句分析函数*/
{if(syn==10)
{scaner();
if(syn==18)//如果是赋值语句
{scaner();
expression。;
}//这个过程实现语法分析判断语句
else
{printf("error!evaluatetagerror");
kk=1;
}
}
else
if(syn==6)
return;
else
if(syn==2)//如果是条件判断语句就判断条件表达式的语法
{scaner();
if(syn==27)//判断括号匹配
{do
{scaner();//进入括号内部进行表达式分析
expr