好文档 - 专业文书写作范文服务资料分享网站

算符优先分析器设计实验报告--宁剑

天下 分享 时间: 加入收藏 我要投稿 点赞

.. . .. . .

装 订

线

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 #include #include #include #define MAX 100 using namespace std; char S[MAX];

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. . . . 移

. ..

算符优先分析器设计实验报告--宁剑

.......装订线S.编译原理实验报告
推荐度:
点击下载文档文档为doc格式
070z40ohze7b8vd538ce5nrap1rg1l00xi9
领取福利

微信扫码领取福利

微信扫码分享