姓名学号成绩实验报告实验题目:C.4算符优先分析法课程名称:编译原理主讲教师:班级:实验日期:提交日期:一、实验目的:采用算符优先分析法对表达式(不包含括号运算)进行分析,并给出四元式。二、实验内容在实验1、2的基础上,用算符优先分析法编制语法分析程序。分析过程:先在算符栈置“$”,然后开始顺序扫描表达式,若读来的单词符号是操作数,这直接进操作数栈,然后继续读下一个单词符号。分析过程从头开始,并重复进行;若读来的是运算符θ2则将当前处于运算符栈顶的运算符θ1的入栈优先数f与θ2的比较优先函数g进行比较。三、程序的改写:因为这次的实验与前面两次的实验有很大的重合,所以会用到很多之前两次的代码。首先,定义函数:其中本次需要写的函数有:入栈优先函数f,比较优先函数g,compare,middle,栈函数以及主函数。1.入栈优先函数f书上已经给出了入栈优先函数的表,根据输入的符号赋予数值,以便后面方便比较。2.比较优先函数g原理同入栈优先函数f3.compare用f()和g()来做比较,来判定是否将运算符压入栈。4.middle将取算符栈顶的运算符和操作数栈顶的两个操作数做运算的方法写在一个函数里,这样方面以后的调用,使代码变得简洁些。5.push_operatorStack6.pop_operatorStack7.top_operatorStack8.push_operandStack9.pop_operandStack10.top_operandStack以上的有关栈的函数在数据结构中学过。11.main在主函数中,先将文件里的内容读入缓冲区,然后从缓冲区依次取数进行一下判断,如果取出的是数字时将数字压入操作数栈,如果取出的是运算符时调用compare()函数判断是将其压入栈,还是做其他的操作。当结束操作后,算符栈里遇到$,操作数栈里只有结果时,操作成功,否则失败。结果四、我的感想这次试验可以说是前两个试验的综合了,程序中也很多用到了前两次的代码。对于我自己来说,最难的部分在于将这些思想转换成代码实现出来,很大一部分在于自己平时没有多打代码以及就是对算符优先分析的思想理解得还不够透彻。在写main函数时,因为要调用很多函数,刚开始写的时候陷入了死循环,以及栈函数的各种调用发生错误,说明自己思路还不够清晰。因为这次实验是在考完试后做的,之前对算符优先分析以及四元式的理解不够明白,在这个实验实现成功后,自己能够透彻地了解,知道了算符文法的形式,对给定的算符文法能构造算符优先关系分析表,并判别所给出的文法是否为算符优先文法。同时我也算符优先文法的优缺点以及实际应用中的局限性。