算符优先分析器设计实验报告__宁剑_第1页
算符优先分析器设计实验报告__宁剑_第2页
算符优先分析器设计实验报告__宁剑_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理实验报告题目:算符优先分析法分析器学院 计算机科学与技术专业 XXXXXXXXXXXXXXXX学号XXXXXXXXXXXX姓名宁佥I指导教师XXXX2015年xx月xx日算符优先分析法分析器一、实验目的1. 理解自底向上优先分析,比较和自顶向下优先分析的不同。2. 理解算符优先分析的特点,体会其和简单优先分析方法的不同。3. 加深对编译器语法分析的理解。二、实验原理1. 自底向上优先分析方法,也称移进-归约分析,粗略地说它的思想是对输入符号串自左向右进行扫描,并将输入符号逐个移入一个后进先出栈 ,边移入 边分析,一旦栈顶符号串形成某个句型的句柄或可归约串时 ,就将该产生式的 左部非终极

2、符代替相应的右边文法符号串。2. 算符优先分析法的基本思想首先确定算符(确切地说是终结符)之间的优先关系和结合性质,然后借 助这种关系,比较相邻算符之间的优先级来确定句型的可归约串,并进行归约。注意:算符优先分析过程是自下而上的归约过程 ,但它的可归约串未必是 句柄,也就是说,算符优先分析过程不是一种规范归约。3. 终结符号间优先关系的确定,用FIRSTVT和LASTVT计算。4. 最左素短语所谓素短语是指这样一个短语,它至少含有一个终结符,并且除它自身之外不再含有其它素短语。最左素短语是指处于句型最左边的那个素短语。最左 素短语是算符优先分析算法的可归约串5.计算得到所给文法的算符优先矩阵+

3、 )i<s><=<<<>AAA<<AA* 1> 1<<<>>>s>><!<1 <<1 H>>>>>-><<1 -二三、实验要求使用算符优先分析算法分析下面的文法:E'爭E#E+T|TT*F|FFt pA f|PPf (E)|i其中i可以看作是一个终结符,无需作词法分析。具体要求如下:1如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优 先关系、输入符号串的变化情况;2.如果输入符号串不是正确句子,

4、则指示出错位置。四、实验结果(程序)及分析#in elude <stdio.h>#in elude <cstri ng>#in elude <iostream>#i nclude <ioma nip>#defi ne MAX 100using n amespaee std;char SMAX;char shuruMAX,yuMAX;void sea nn er();int pany ouxia n( ehar x);void she ngyuchua n();int k;char youxia n 77='>','&

5、lt;','v','v','v','>','>','v','v','v','v','v','=','$','v','v','v','v','v','$','=',; /优先关系表,其中 > 为大于,< 为小于,=为等于,$为空格int mai n()in t l,

6、j;coutvv"请输入一个字符串:";ci n.get(shuru,MAX); /将输入的字符串存到数组剩余输入串移coutvv"步骤 栈 优先关系 当前符号进或归约"<<endl;k=0;Sk='#'Sk+1='O'l=strle n(shuru); /求输入字符串的长度for(j=0;j<l;j+)yuj=shuruj;yuj='0'sca nn er();return 0;void sca nn er() /扫描分析输入串int i,j,l,h1,l1,h2,l2,h3,l3,y1

7、,y2,r1,r2;int step=0;分析步骤数char a; /存放正在分析的字符char p1,Q,p2;l=strle n(shuru); /算出输入串长度for(i=0;i<l;i+)a=shurui;if(Sk='+'|Sk='*'|Sk=y|Sk='i'|Sk='('|Sk=')'|Sk='#')j=k;elsej=k-1;h1=panyouxian(Sj);从优先关系表中查出Sj和a的优先关系if(a='+'|a='*'|a='A

8、9;|a='i'|a='('|a=')'|a=#)l1=pa ny ouxia n( a);else /如果句子含有不是终结符集合里的其它字符,不合法coutvv"错误!不合法的句子!"<<endl;break;p1= youxia n h1l1;if(p1='>')loop:Q=Sj;if(Sj-1='+'|Sj-1='*'|Sj-1='A'|Sj-1='i'|Sj-1='('|Sj-1')'|S

9、j-1='#')j=j-1;elsej=j-2;h2=pa nyouxia n(Sj);l2=pa ny ouxia n( Q);p仁 youxia n h2l2;if(p仁='<') /Sj+1Sk归约为 Fk=j+1;she ngyuchua n();step+;cout<vleftvv"("vvstepvvsetw (6) <<")"<<setw(10)<<S<<setw(10)<vp1vvsetw(10)vvavvsetw(5)vvrightvvyu

10、<vsetw(15)vv"归约"<<e ndl;i-;Sk='F'r1=strle n(S);for(r2=k+1;r2<r2;r2+)Sr2='0'多个字符归约,把栈顶后面的舍弃y1=strle n(y u);for(y2=0;y2<y1;y2+)yuy1-y2=yuy1-y2-1;yu0='i'elsegotoloop;elseif(p仁='<')/移进如果上一步是不归约,剩余的字符串减少一个she ngyuchua n();shurul='0'step=

11、step+1;cout<vleftvv"("vvstepvvsetw (6) <<")"<<setw(10)<<S<<setw(10)<vp1vvsetw(10)vvavvsetw(5)vvrightvvyu<vsetw(15)vv"移近"<<e ndl;k=k+1;Sk=a;elseif(p1='=')h3=pa ny ouxia n( Sj); l3=pa ny ouxia n( '#');p2=youxia nh3l3;

12、if(p2='=')she ngyuchua n(); step+;cout<vleftvv"("vvstepvvsetw (6) <<")"<<setw(10)<<S<<setw(10)<vp1vvsetw(10)vvavvsetw(5)vvrightvvyu<vsetw(15)vv"接受"<<e ndl;cout«"合法的句子!"<<endl;break;elsek=k+1;Sk=a;else出错

13、!"<<e ndl;cout«" break;void she ngyuchua n()int i,j;i=strle n(yu);for(j=0;j<i;j+)yuj=yuj+1;yui-1='0'int pany ouxia n( char x)int m;switch(x)case'+':m=0; break;case'*':m=1; break;case'A':m=2; break;case'i':m=3;break;case'(':m=4;

14、break;case')':m=5;break;case'#':m=6;break;return m;输入的程序界面如图:输入一个正确的句子,结果如下:乘铀i入串丄-<£+£:#栈吮先天系当前符号+1tt1*合法的句子它Process exited after 27.&? seconds witli re turn value H 青持任意甜绅绒-C ;U 昭 r&XAdm n istratoAC es Icto p宁剑' 未命峯 1 exe4v_41<MF<#F+<ttF+i<ltF*F<#rrF*<<»

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论