欢迎来到天天文库
浏览记录
ID:38870250
大小:790.58 KB
页数:25页
时间:2019-06-20
《编译原理实验报告1225111005方迪恺》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、学院:计算机科学与技术班级:12级计算机科学与技术学号:1225111005姓名:方迪恺题目:基于初等函数运算的编译系统目录:一、前言二、词法分析器2.1实验目的2.2实验内容与要求2.3词法模式设计与正则式的确立2.4记号表2.5NFA2.6DFA2.7状态转换表2.8程序设计思路与主要算法三、语法分析器3.1实验目的3.2实验内容与要求3.3构造上下文无关文法3.4改写为LL(1)文法3.5预测分析表3.6递归下降子程序3.7实验结果及讨论四、语义分析器4.1实验目的4.2实验内容与要求4.3后序遍历得到后缀表达式4.4程序结构设计4.5实验结果及讨论五、实验总结六、参
2、考文献一、【前言】本实验主要内容是实现一个初等函数运算语言的解释器或编译器。初等函数是由幂函数、指数函数、对数函数、三角函数、反三角函数与常数经过有限次的有理运算(加、减、乘、除)及有限次函数复合所产生、并且能用一个解析式表示的函数。如表一所示,本实验中仅要求完成部分初等函数,包括三角函数、幂函数、指数函数、对数等类型。表一、实验要求的初等函数表函数类型函数名称参数说明sin(x)正弦函数xcos(x)余弦函数xtg(x)正切函数xctg(x)余切函数xx^y幂函数/指数函数x:底数,y:指数log(x,y)对数x:底数,y:lg(x)以10为底的对数Xln(x)以e为底的
3、对数Xlog(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、通过赋值语句给变量赋值。4)表达式是一个初等函数(函数、变量、常数等通过四则运算或函数嵌套而成)。5)输出语句是:?<表达式>。将在界面上输出该表达式的值。如果其中有某一个变量没有赋值,那么将输出该表达式简化后的式子。二、词法分析器设计2.1【实验目的】1、为初等函数运算语言构造语法分析器。2、掌握生成词法分析器的方法,加深对词法分析原理的理解。3、掌握设计、编制并调试词法分析程序的思想和方法。2.2【实验内容及要求】一、根据下面的要求设计初等函数运算语言的词法模式,并用正则式表达出来1、初等函数运算语言的常量为实数类型,其定义方式为实数的最一般书写方式,如:123.321
5、。具体要求:不支持整数部分大于0时首数字为0;不支持小数点后结尾为0;不支持科学记数法;不支持仅为整数时有小数点。2、初等函数运算语言的变量采用与C语言的标识符定义一样的方式:首字符为字母或下划线;其他的为字母、数字及下划线的混合串;区分大小写;变量长度不超过32个字符。3、初等函数运算语言需要处理的函数仅为表一中所列举的内容。4、初等函数运算语言支持四则运算,其计算的符号与C语言相同,为:+-*/。5、初等函数运算语言的合法的分隔符包括:空格、制表符、、分行符圆括号(左、右)、分号。其中空格、制表符、分行符可以出现在任何两个不同的单词中间;圆括号(左、右)用于表达式中,用
6、于改变运算的优先级,以及标识函数的参数;分号用于标识一个语句的结束。6、初等函数运算语言支持的常量还包括:PI,E。2.3【词法模式设计与正则式的确定】我们将程序中可能出现的单词分为以下四类:运算符(如+等)、标识符(如变量X等)、分隔符(如;等)、常量(如5等)。正则式的确定:运算符:Operation=+
7、-
8、*
9、/
10、=
11、^标识符(变量):Variable=(_
12、a
13、b
14、…
15、z
16、A
17、B
18、…Z)(_
19、a
20、b
21、…
22、z
23、A
24、B
25、…
26、Z
27、0
28、1
29、2
30、…
31、9)*分隔符:Compart=空格
32、t
33、
34、(
35、)
36、;常量:Constant=(ε
37、-)((0
38、(1-9)(0-9)*)(
39、.(0-9)*(1-9)
40、ε))
41、PI
42、E关键字:Keyword=sin
43、cos
44、tg
45、ctg
46、log
47、lg
48、ln(由于这些关键字的识别与普通标识符差不多,所以可以在识别出标识符后马上进行判断是不是关键字来实现,不需要再单独进行构造)2.4【记号表】sincostgctglog(x,y)lglnlog(x)();?+0123456789101112-*/=常量变量^,{}无法识别标识符1314151617181920212223PIE#2425262.5【NFA】只需要对变量以及常量构造NFA。2.6【DFA】根据
此文档下载收益归作者所有