编译原理实验内容
编译器案例 本实验主要内容是实现一个初等函数运算语言的解释器或编译器。初等函数是由幂函数、指数函数、对数函数、三角函数、反三角函数与常数经过有限次的有理运算(加、减、乘、除)及有限次函数复合所产生、并且能用一个解析式表示的函数 程序对这些表达式进行计算和求值,并根据要求输出相应的值。
【前言】
本实验主要内容是实现一个初等函数运算语言的解释器或编译器。初等函数是由幂函数、指数函数、对数函数、三角函数、反三角函数与常数经过有限次的有理运算(加、减、乘、除)及有限次函数复合所产生、并且能用一个解析式表示的函数。编译器案例
如表一所示,本实验中仅要求完成部分初等函数,包括三角函数、幂函数、指数函数、对数等类型。编译器案例
表一、实验要求的初等函数表
函数类型 函数名称 参数说明
sin(x) 正弦函数 x
cos(x) 余弦函数 x
tg(x) 正切函数 x
ctg(x) 余切函数 x
x^y 幂函数/指数函数 x:底数,y:指数
log(x,y) 对数 x:底数,y:
lg(x) 以10为底的对数 x
ln(x) 以e为底的对数 x
log(x) 以2为底的对数 x
本程序从输入界面或文件中接收一个包含了各种初等函数表达式的字符串,程序对这些表达式进行计算和求值,并根据要求输出相应的值。编译器案例
例1:
输入:
x = 0.5*PI;
y = E;
z = 3;
?1/3*(ln(y)+5*sin(x))+(7+z)^2;
输出:102
例2:
输入:
x = 0.5*PI;
y = E;
?1/3*(ln(y)+5*sin(x))+(7+z)^2;
输出:2+(7+z)^2
初等函数运算语言相关的内容如下:
1)语言中仅使用实数这一种数据类型。所有常数、变量及表达式都为实数类型。编译器案例
2)语言中可以定义变量来存放数值,变量的定义方式与c语言中的标识符相同。编译器案例
3)可以通过赋值语句给变量赋值。编译器案例
4)表达式是一个初等函数(函数、变量、常数等通过四则运算或函数嵌套而成)。编译器案例
5)输出语句是:?<表达式>。将在界面上输出该表达式的值。如果其中有某一个变量没有赋值,那么将输出该表达式简化后的式子。编译器案例
实验一 词法分析器设计
【实验目的】
1、为初等函数运算语言构造语法分析器。编译器案例
2、掌握生成词法分析器的方法,加深对词法分析原理的理解。编译器案例
3、掌握设计、编制并调试词法分析程序的思想和方法。编译器案例
【实验内容及要求】
一、根据下面的要求设计初等函数运算语言的词法模式,并用正则式表达出来
初等函数运算语言的常量为实数类型,其定义方式为实数的最一般书写方式,如:321。具体要求:不支持整数部分大于0时首数字为0;不支持小数点后结尾为0;不支持科学记数法;不支持仅为整数时有小数点。编译器案例
初等函数运算语言的变量采用与C语言的标识符定义一样的方式:首字符为字母或下划线;其他的为字母、数字及下划线的混合串;区分大小写;变量长度不超过32个字符。编译器案例
初等函数运算语言需要处理的函数仅为表一中所列举的内容。编译器案例
初等函数运算语言支持四则运算,其计算的符号与C语言相同,为:+-*/。
初等函数运算语言的合法的分隔符包括:空格、制表符、、分行符圆括号(左、右)、分号。其中空格、制表符、分行符可以出现在任何两个不同的单词中间;圆括号(左、右)用于表达式中,用于改变运算的优先级,以及标识函数的参数;分号用于标识一个语句的结束。编译器案例
初等函数运算语言支持的常量还包括:PI,E。编译器案例
实验二 语法分析器设计(1)-自上而下的分析
【实验目的】
1、为初等函数运算语言构造LL(1)语法分析器。编译器案例
2、掌握LL(1)语法分析器的方法,加深对自上而下语法分析原理的理解。编译器案例
3、掌握设计、编制并调试LL(1)语法分析程序的思想和方法。编译器案例
【实验内容及要求】
一、根据初等函数运算语言运算法则,将语法模式用上下文无关文法表达。编译器案例
注意运算的优先性,避免产生二义性文法。
二、将上述文法改写为LL(1)文法。编译器案例
三、根据LL(1)文法给出预测分析表。编译器案例
四、根据预测分析表,给出解析LL(1)文法的递归下降子程序或预测分析器程序。编译器案例
五、本语法分析程序的输入是实验一生成的记号流;本程序需定义语法树的数据结构;语法分析的输出是一棵语法树。编译器案例
六、当输入存在语法错误时,需给出语法错误的提示,指出语法错误发生的位置和错误类型。编译器案例
实验二 语法分析器设计(2)-自下而上的分析
【实验目的】
1、为初等函数运算语言构造SLR(1)语法分析器。编译器案例
2、掌握SLR(1)语法分析器的方法,加深对自下而上的语法分析原理的理解。编译器案例
3、掌握设计、编制并调试SLR(1)语法分析程序的思想和方法。编译器案例
【实验内容及要求】
一、根据初等函数运算语言运算法则,将语法模式用上下文无关文法表达。编译器案例
注意运算的优先性,避免产生二义性文法。
二、将上述文法改写为SLR (1)文法。编译器案例
三、根据SLR(1)文法给出移进规约分析表。编译器案例
四、根据预测分析表,给出解析SLR (1)文法的语法分析程序。编译器案例
五、本语法分析程序的输入是实验一生成的记号流;本程序需定义语法树的数据结构;语法分析的输出是一棵语法树。编译器案例
六、当输入存在语法错误时,需给出语法错误的提示,指出语法错误发生的位置和错误类型。编译器案例
实验三 语义分析器设计
【实验目的】
1、为初等函数运算语言语义分析器。编译器案例
2、掌握语义分析器的设计和开发方法,加深对语义分析原理的理解。编译器案例
【实验内容及要求】
一、根据初等函数运算语言运算法则,将一个完整的、合法的初等函数运算语言的程序(可能包含多个语句)的结果计算出来。编译器案例
二、为初等函数运算语言设计恰当的三地址码命令,并编写编译器将一个完整的、合法的初等函数运算语言的程序,转换成为一个四元式序列。该序列能转换成为可执行代码,或在一个模拟器中执行。编译器案例
三、试完成不完整的初等函数运算语言程序的的计算:将所有能够计算的表达式都计算出相应的值;输出约减后的表达式。编译器案例
例:z = 8;
x = 3*z + y;
?x;
输出为:24+y;
四、试给出一个初等函数运算语言程序的解释执行器。用户从界面上输入表达式,程序将直接返回当前表达式的值,或约减后的表达式。编译器案例
实验名称:
班 级:
班 号:
学 号:
姓 名:
年 月 日
1 实验目的
2 实验内容
2.1词法模式设计/正则式
2.2DFA
2.3状态转换表
2.4记号表
3、实验程序清单
4、调试过程和运行结果
5、程序的主要部分及其功能说明
6、实验收获体会
7、改进意见