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-
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库实验二语法分析201110405137(2)在线全文阅读。
相关推荐: