.. . .. . .
装 订
线
S.
编译原理实验报告
题目: 算符优先分析法分析器 学 院 计算机科学与技术 专 业 xxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxx 姓 名 宁剑 指导教师 xxxx
2015年xx月xx日
算符优先分析法分析器
. . . . ..
.. . .. . .
一、实验目的
1.理解自底向上优先分析,比较和自顶向下优先分析的不同。 2.理解算符优先分析的特点,体会其和简单优先分析方法的不同。 3.加深对编译器语法分析的理解。
二、实验原理
1.自底向上优先分析方法,也称移进-归约分析,粗略地说它的思想是对输入符号串自左向右进行扫描,并将输入符号逐个移入一个后进先出栈,边移入边分析,一旦栈顶符号串形成某个句型的句柄或可归约串时,就将该产生式的左部非终极符代替相应的右边文法符号串。
2.算符优先分析法的基本思想
首先确定算符(确切地说是终结符)之间的优先关系和结合性质,然后借助这种关系,比较相邻算符之间的优先级来确定句型的可归约串,并进行归约。
注意:算符优先分析过程是自下而上的归约过程,但它的可归约串未必是句柄,也就是说,算符优先分析过程不是一种规归约。
3.终结符号间优先关系的确定,用FIRSTVT和LASTVT计算。 4.最左素短语
所谓素短语是指这样一个短语,它至少含有一个终结符,并且除它自身之外不再含有其它素短语。最左素短语是指处于句型最左边的那个素短语。最左素短语是算符优先分析算法的可归约串。
5.计算得到所给文法的算符优先矩阵
S. . . . . ..
.. . .. . .
6.算符优先分析的基本过程
三、实验要求
使用算符优先分析算法分析下面的文法:
E’→#E# E→E+T|T T→T*F|F F→P^F|P
S. . . . . ..
.. . .. . .
P→(E)|i
其中i可以看作是一个终结符,无需作词法分析。具体要求如下: 1.如果输入符号串为正确句子,显示分析步骤,包括分析栈中的容、优先关系、输入符号串的变化情况;
2.如果输入符号串不是正确句子,则指示出错位置。
四、实验结果(程序)及分析
#include
char shuru[MAX],yu[MAX]; void scanner(); int panyouxian(char x); void shengyuchuan(); int k;
char youxian[7][7]= { {'>','<','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
S. . . . . ..
.. . .. . .
{'>','>','<','<','<','>','>'},
{'>','>','>','$','$','>','>'}, {'<','<','<','<','<','=','$'}, {'>','>','>','$','$','>','>'},
{'<','<','<','<','<','$','='}, }; //优先关系表,其中>为大于,<为小于,=为等于,$为空格
int main() { int l,j;
cout<<\请输入一个字符串:\
cin.get(shuru,MAX); //将输入的字符串存到数组
cout<<\步骤 栈 优先关系 当前符号 剩余输入串进或归约\
k=0; S[k]='#';
S[k+1]='\\0';
S. . . . 移
. ..
算符优先分析器设计实验报告--宁剑
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)