实验二语法分析201110405137(2)

2019-08-03 13:17

factor()

{ if((syn==10)||(syn==11)) scaner(); else if(syn==27)

{ scaner(); /*读下一个单词符号*/ expression(); /*调用函数statement();*/ if(syn==28)

scaner(); /*读下一个单词符号*/ else { printf(\ kk=1; } }

else { printf(\ kk=1; }

return; }

scaner() { sum=0;

for(m=0;m<8;m++)token[m++]=NULL; m=0;

ch=prog[p++];

while(ch==' ')ch=prog[p++];

if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))

{ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) {token[m++]=ch; ch=prog[p++]; } p--; syn=10;

token[m++]='\\0'; for(n=0;n<6;n++)

if(strcmp(token,rwtab[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;

-6-

ch=prog[p++]; if(ch=='>') {syn=21; }

else if(ch=='=') { syn=22; } else

{syn=20; p--; }

break;

case '>':m=0; ch=prog[p++]; if(ch=='=') { syn=24; } else

{ syn=23; p--; }

break; case ':':m=0; ch=prog[p++]; if(ch=='=') { syn=18; } else

{ syn=17; p--; }

break;

case '+': syn=13; break; case '-': syn=14; break; case '*': syn=15;break; case '/': syn=16;break; case '(': syn=27;break; case ')': syn=28;break; case '=': syn=25;break; case ';': syn=26;break; case '#': syn=0;break; default: syn=-1;break; } }

五、 实验过程原始记录( 测试数据、图表、计算等)

-7-

六、实验结果、分析和结论(程序运行结果、改进、收获)

本实验在词法分析的基础上,对提取出的标识符进行语法判断。对已有的语法规则运用LL(1)文法判别并进行构造分析表时,遇到的最大困难是:当发生规约冲突时,该如何处理。如对于产生式s-->aAb,当对a进行规约时,满足语法规则的β(用户输入串中当前要进行规约的标识符)只有有限种,而不满足的却有无限种情况。当发生规约冲突时,如何在这无限种情况中,确定冲突的具体信息,以便用户查找。在反复的尝试和验证中,我们发现发生冲突的用户输入串满足一定的规律,且按这种规律可以把这无限种情况化归为有限类,于是我们找出其中规律并进行划分,然后再对这些有限类冲突进行处理。编译原理这门课的知识比较逻辑化和抽象华,要学懂这门课比较困难,因此,在今后学习中,我要更加努力,熟读课本,以求熟悉并掌握该门课的知识要点。

注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

-8-


实验二语法分析201110405137(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年4月河南省高考适应性考试数学(理)试题含答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: