没有合适的资源?快使用搜索试试~ 我知道了~
程序设计3 语义分析程序的设计与实现1
需积分: 0 2 下载量 95 浏览量
2022-08-03
17:11:02
上传
评论
收藏 427KB PDF 举报
温馨提示
试读
7页
一、 实验题目与要求 二、 实验分析 三、 源程序 四、 验证结果
资源推荐
资源详情
资源评论
程序设计 3 语义分析程序的设计与实现
实验报告
班级:-------- 姓名:-------- 学号:--------
一、 实验题目与要求
题目:语义分析程序的设计与实现。
实验内容:编写语义分析程序,实现对算术表达式的类型检查和求值。要求所分析算术表达
式由如下的文法产生。
||
* | / |
. | ( ) |
E E T E T T
T T F T F F
F num num E num
实验要求:用自底向上的语法制导翻译技术实现对表达式的分析和翻译。
(1) 写出满足要求的语法制导定义或翻译方案。
(2) 编写分析程序,实现对表达式的类型进行检查和求值,并输出:
① 分析过程中所有产生式。
② 识别出的表达式的类型。
③ 识别出的表达式的值。
(3) 实验方法:可以选用以下两种方法之一。
① 自己编写分析程序。
② 利用 YACC 自动生成工具。
二、 实验分析
本次实验使用 YACC 语法分析程序生成器,其中词法分析调用了 LEX 词法分析程
序,在实验 2 的基础上进行扩展。首先文法中删去了 id,因此在 lex 语法中删去关于 id
的识别,同时在 yacc 语法中添加了对 num.num 这一文法的识别。由于要通过自底向上
的语法制导翻译技术来实现对表达式类型的检查以及求值,因此必须对识别出的符号的
属性进行扩充,由原先的 value 扩充到 value 和 type,即定义第二个综合属性 E.type。
这需要将原先 YYSTYPE 的类型由 double 扩充为 struct,在 struct 中包含 value 和 type
两个属性。然后对表达式中的翻译方案进行修改,根据不同表达式决定产生式的类型。
因此首先要分析文法的翻译方案。
由于文法中只有 num 和 num.num,因此本文法涉及的类型只有 int 和 real。又因为
int 可以隐式类型转换成 real 类型,因而本文法中重点考虑的是类型转换而非之前定义
id 时需要考虑的判断类型是否合法;再加上文法全部是规约至标识符的语句,所以判断
类型即判断标识符的类型。由分析可知,F->num.num 得到的是 real 类型,F->num 得
到的是 int 类型,而在计算中,当两个标识符都是 int 型时,得到结果的标识符为 int 型,
而存在一个标识符为 real 型,另一个标识符为 int 型时,后者需要隐式类型转换为 real
型,得到的结果也就是 real 型了。
资源评论
焦虑肇事者
- 粉丝: 54
- 资源: 310
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现首先研究了语音激活检测算法
- 基于matlab实现人工蜂群算法优化无刷直流电机PID控制,并采用三种评价指标函数IAE、ITAE、ITSE来进行对比分析
- 《vue.js实战开发系列》 课件.rar
- 基于matlab实现水声通信中海洋噪声的仿真,wenz测量的噪声谱线级,噪声估计MATLAB.rar
- 基于matlab实现通过PID调节器实现炉温控制,原理图+matlab源码+matlab仿真.rar
- 基于matlab实现遗传算法的BP网络设计,应用背景为交通流量的预测.rar
- 基于matlab实现遗传算法优化BP神经网络,通过遗传算法对BP神经网络进行优化.rar
- java-leetcode面试题解Stack之第1047题删除字符串中的所有相邻重复项-题解.zip
- java-leetcode面试题解Stack之第232题用栈实现队列-题解.zip
- java-leetcode面试题解Stack之第225题用队列实现栈-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功