编译原理练习试验

编译原理练习试验
表达式计算器的设计与实现
一、 字符集定义
1. <字符> → <数字>│<单界符>│.
2. <数字> → 0│<非零数字>
3. <非零数字>→ 1│2│…│9
4. <单界符> →<运算符>│(│)
5. <运算符> → +│-│*│/
二、 单词集定义
6.<单词> → <单界符>│<常数>
7.<常数> → <无符号整数>│<无符号浮点数>
8.<无符号整数> →0│<非零整数>
9.<非零整数> → <非零数字> <数字串>
10.<数字串> → <数字> <数字串>│NULL
11.<无符号浮点数> →<无符号整数>. <数字> <数字串>
三、 数据类型定义
12.<类型> → int│double
四、 表达式定义
13.<算术表达式> → <项> + <算术表达式>│<项> - <算术表达式>│<项>
14.<项> → <因子> * <项>│<因子> / <项>│<因子>
15.<因子> → <算数量>│- <因子>
16.<算术量> → <常数>│( <算术表达式> )
五、 表达式计算器的单词编码
单 词 种别码 单 词 种别码 单 词 种别码

  • 1 / 4 ( 6
  • 2 无符号整数 5 ) 7
  • 3 无符号浮点数 8
    实验一:表达式计算器的词法分析器的设计与实现
    1、 根据上面给出的单词集定义,设计构造出该表达式计算器的DFA。(第一次上机课4学时,时间不够的课下完成)
    2、 根据自己所设计构造的DFA,参考教材的内容,编写代码实现该DFA。(第二上机课4学时,时间不够的课下完成)
    检查要求:
    a) 启动程序后,先输出作者姓名、班级、学号(可用汉语、英语或拼音);
    b) 请求输入测试程序名,键入程序名后自动开始词法分析并输出结果(输入为字符流,输出为单词串,即每个单词为一个节点,每个节点有种别码、字符串原貌、Value和Type等属性值,供语法分析和语义分析使用);
    c) 输出结果为单词的多元(种别码,字符串原貌,Value属性,Type属性)式序列(样式见样板输出1);
    d) 要求能发现下列词法错误和指出错误性质和位置:(样式见样板输出2)
    非法字符,即不是表达式计算器字符集的符号;
    发现错误后要能够继续编译下去,不能只报一个错误;

测试程序1: 程序文件名TEST1
10/((1.56-4)+0*-4+0.0000)
样板输出1:(要求在屏幕上显示)
( 5,10,10,int)
(4,/,NULL,NULL)
(6,(,NULL,NULL)
(6, (,NULL,NULL)
( 8,1.56,1.56,double)
(2,-,NULL,NULL)
( 5,4,4,int)
(7,),NULL,NULL)
(1,+,NULL,NULL)
(5,0,0,int)
(3,*,NULL,NULL)
(2,-,NULL,NULL)
(5,4,4,int)
(1,+,NULL,NULL)
(8,0.0000,0.0,double)
(7,),NULL,NULL)

测试程序2:程序文件名TEST2
8-4
10*[4.0/(3±1.0)]

样板输出2:(要求在屏幕上显示)
(5,8,8,int)
(2,-,NULL,NULL)
(5,4,4,int)
(5,10,10,int)
(3,,NULL,NULL)
(8,4.0,4.0,double)
(4,/,NULL,NULL)
(6,(,NULL,NULL)
(5,3,3,int)
(1,+,NULL,NULL)
(2,-,NULL,NULL)
(8,1.0,1.0,double)
(7,(,NULL,NULL)
ERROR:
Error1:第2行
后面存在非法字符“[”;
Error2:第2行)后面存在非法字符“]”
实验二:表达式计算器的语法、语义分析器的设计与实现(输出四元式的中间结果和最终的运算结果)。
在实验一词法分析的基础上,以词法分析输出结果(单词串或者成为多元式序列)作为该语法语义分析器的输入,最后输出中间代码四元式序列,并计算出表达式最后的结果。(共8个上机学时,时间不够的请自己课下找时间补完)
实现方法上,建议大家采用算符优先分析法或者LR分析方法,进行语法制导翻译。先根据上述文法中的“表达式定义”构造算符优先关系表或者LR分析表进行语法分析。
检查要求:
e) 启动程序后,先输出作者姓名、班级、学号(可用汉语、英语或拼音)。
f) 请求输入测试程序名,键入程序名后自动开始编译。
g) 输出四元式中间代码(样式见样板输出3)。
h) 能发现程序的语法错误并输出出错信息(样式见样板输出4)。

测试程序3:程序文件名TEST3
10/((1.56-4)+0*-4+0.0000)

样板输出3:(要求在屏幕上显示
( 0) (-,1.56,4,t1)
( 1) (@,4,NULL ,t2)
( 2) (*,0,t2,t3)
( 3) (+ ,t1,t3,t4)
( 4) (+ ,t4,0.0000,t5)
( 5) (/,10 ,t5 ,t6)

测试程序4:程序文件名TEST4
10/(1.56-4)+0*-4+0.0000)
样板输出4:(要求在屏幕上显示)
ERROR
Error1:第1行右括号不匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值