全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 1 语法制导翻译绘制函数图形 编译原理 上机作业 3 2 简单复习 函数f t t的图形 origin is 200 300 设置原点的偏移量 rot is pi 6 设置旋转角度 scale is 2 1 设置横坐标和纵坐标的比例 for T from 0 to 200 step 1 draw t 0 横坐标的轨迹 for T from 0 to 180 step 1 draw 0 t 纵坐标的轨迹 for T from 0 to 150 step 1 draw t t f t t的轨迹 词法分析器 识别输入序列 并为语法分析器提供记号 语法分析器 根据记号流识别句子 并为表达式构造语法树 语义分析器 根据语言结构 处理函数绘图语言程序的语义 3 1 表达式值的计算 深度优先后序遍历语法树 2 图形的绘制 画出每个坐标点 绘图所需的语义处理 2 3 3 语法制导翻译绘制图形 从origin rot和scale中得到坐标变换所需的信息 for draw语句根据t的每一个值进行如下处理 a 计算被绘制点的横 纵坐标值 b 根据坐标变换信息进行坐标变换 得到实际坐标 c 根据点的实际坐标画出该点 2 3 3 1 绘图语言的语义 4 语法制导翻译的基本步骤 为文法符号设计属性 设计语义规则中所需的辅助函数 为产生式设计语义规则 不考虑实现时是语法制导定义 比例设置语句的文法如下 ScaleStatment SCALE IS L BRACKET Expression COMMA Expression R BRACKET 可简写为 S SCALE IS E E 此语句的作用是提供横 纵坐标的比例因子 因此 设计属性 x和 y 分别保存比例因子 设计计算表达式值的辅助函数 get value nptr 它返回表达式的值 设计语义规则 S SCALE IS E1 E2 S x get value E1 nptr S y get value E2 nptr 5 2 3 3 2 语义函数的设计 全程变量 类似于设计属性 double Parameter 0 为参数T分配的变量 double Origin x 0 0 Origin y 0 0 用于记录平移距离 double Rot ang 0 0 用于记录旋转角度 double Scale x 1 Scale y 1 用于记录比例因子 例 以点 350 220 为圆心绘制两个同心园 origin is 350 220 Origin x 350 Origin y 220 scale is 50 50 Scale x 50 Scale y 50 for t from 0 to 2 pi step pi 100 draw cos t sin t scale is 100 100 Scale x 100 Scale y 100 for t from 0 to 2 pi step pi 200 draw cos t sin t 6 辅助语义函数 a 计算表达式的值 深度优先后序遍历语法树 double GetExprValue struct ExprNode root b 计算点的坐标值 首先获取坐标值 然后进行坐标变换 static void CalcCoord struct ExprNode Hor Exp struct ExprNode Ver Exp double c 绘制一个点 与环境有关 void DrawPixel unsigned long x unsigned long y d 循环绘制所有的点 void DrawLoop double Start double End double Step struct ExprNode HorPtr struct ExprNode VerPtr 2 7 辅助语义函数设计举例 a 表达式值的计算 b 点轨迹的循环绘制 void DrawLoop double Start double End double Step struct ExprNode HorPtr struct ExprNode VerPtr extern double Parameter 参数T的存储空间 double x y for Parameter Start Parameter End Parameter Step CalcCoord HorPtr VerPtr x y 计算实际坐标 DrawPixel unsigned long x unsigned long y 根据坐标绘制点 8 2 3 3 3 递归子程序中语义规则的嵌入 a OriginStatement b ForStatement 语义规则可以嵌入在递归子程序的任何位置 根据语法制语义规则可以嵌入在递归子程序的任何位置 根据语法制 导翻译的基本思想 如果希望从某部分语言结构中获取语义 则导翻译的基本思想 如果希望从某部分语言结构中获取语义 则 相应的语义规则可以紧跟在该结构的语法分析之后 相应的语义规则可以紧跟在该结构的语法分析之后 9 2 3 3 4 解释器的主程序 略 2 3 3 5 测试例程与测试结果 略 2 3 3 6 解释器的源程序组织 看实际环境 程序的冗余比数据的冗余更危险 资源的物理位置与逻辑位置无关 合理组织资源 利于团队合作与回归测试 辅助信息同等重要 src func draw lextest parsertest yacc draw 源程序 源程序 源程序 源程序 main cpp scannermain cpp parsermain cpp funcdraw l semantics h scanner h parser h funcdraw y semantics cpp scanner cpp parser cpp semantics h semantics c main c 10 2 5 上机题的改进建议 2 5 1 函数绘图语言的扩充 修改显示屏的直角坐标系 使得它与习惯上的坐标系一致 扩充语句类型 使得用户可以规定图形颜色 扩展循环绘图语句 使得for draw语句可以嵌套 增加文本框 使得用户可以在图形中添加文字说明 增加清图功能 使得图形可以具有简单的动画效果 11 2 5 2 采用面向对象技术实现解释器 语法制导翻译的本质反映在面向对象的程序设计 方法上就是一种继承关系 scannerscanner test 引用 parser 引用 parser test 引用 interpreter 继承 main 引用 类主程序 习惯上 提供服务者 server 类 请求服务者 client 主程序 词法分析 语法分析 语义分析 12 static void ForStatement void tree node ptr start ptr end ptr step ptr x ptr y ptr ifndef PARSER DEBUG double start val end val step val 起点 终点 步长 endif MatchToken FOR MatchToken T MatchToken FROM start ptr Expression 起点表达式的语法树 MatchToken TO end ptr Expression 终点表达式的语法树 MatchToken STEP step ptr Expression 步长表达式的语法树 MatchToken DRAW MatchToken L BRACKET x ptr Expression MatchToken COMMA y ptr Expression MatchToken R BRACKET ifndef PARSER DEBUG start val GetExprValue start ptr 起点值 end val GetExprValue end ptr 终点值 step val GetExprValue step ptr 步长值 DrawLoop start val end val step vak x ptr y ptr 绘制图形 DelExprTree start ptr DelExprTree end ptr 释放空间 DelExprTree step ptr DelExprTree x ptr DelExprTree y ptr endif 3 13 不利用类机制 tree node ptr start ptr end ptr step ptr x ptr y ptr angle ptr void for statement syntax for statement的语法分析 match token FOR match token T match token FROM start ptr expression match token TO end ptr expression match token STEP step ptr expression match token DRAW match token L BRACKET x ptr expression match token COMMA y ptr expression match token R BRACKET void for statement semantics for statement的语义分析 double start val end val step val for statement syntax 语法分析获取各表达式的语法树 start val GetExprValue start ptr 计算各表达式的值并绘图 end val GetExprValue end ptr step val GetExprValue step ptr DrawLoop start val end val step val x ptr y ptr DelExprTree start ptr 释放空间 DelExprTree end ptr DelExprTree step ptr DelExprTree x ptr DelExprTree y ptr 14 利用类机制 tree node ptr start ptr end ptr step ptr x ptr y ptr angle ptr void parser class for statement 基类中的for statement match token FOR match token T match token FROM start ptr expression match token TO end ptr expression match token STEP step ptr expression match token DRAW match token L BRACKET x ptr expression match token COMMA y ptr expression match token R BRACKET void interpreter class for statement 派生类中的for statement double start val end val step val parser class for statement 语法分析获取各表达式的语法树 start val GetExprValue start ptr 计算各表达式的值并绘图 end val GetExprValue end ptr step val GetExprValue step ptr DrawLoop start val end val step val x ptr y ptr DelExprTree start ptr 释放空间 DelExprTree end ptr DelExprTree step ptr DelExprTree x ptr DelExprTree y ptr 15 程序设计方法与程序设计语言支持方法无必然联系 C 对C的发展不仅是提供了对面向对象方法的支持 还 扩展了常量定义 类属机制 异常处理 等等 灵活利用C 提供的机制可提高程序的可读性与可维护性 发挥你的聪明才智 16 double GetExprValue struct ExprNode root if root NULL return 0 0 switch root OpCode case PLUS return GetExprValue root Content CaseOperator Left GetExprValue root Content CaseOperator Right case MINUS 其它二元运算类似处理 case POWER return pow GetExprValue root Content CaseOperator Left GetExprValue root Content CaseOperator Right case FUNC return root Content CaseFunc MathFuncPtr GetExprValue root Content CaseFunc Child case CONST ID return root Content CaseConst case T return root Content CaseParmPtr default return 0 0 返回 17 void DrawLoop double Start double End double Step struct ExprNode HorPtr struct ExprNode VerPtr extern double Parameter double x y for Parameter Start Parameter End Parameter Step CalcCoord HorPtr VerPtr x y 计算点的实际坐标 DrawPixel unsigned long x unsigned long y 根据坐标绘制点 18 static void CalcCoord struct ExprNode Hor Exp struct ExprNode Ver Exp double HorCord GetExprValue Hor Exp 计算点的原始坐标 VerCord GetExprValue Ver Exp HorCord Scale x 比例变换 VerCord Scale y 旋转变换 Hor tmp HorCord cos Rot angle VerCord sin Rot angle VerCord VerCord cos Rot angle HorCord sin Rot angle HorCord Hor tmp HorCord Origin x 平移变换 VerCord Origin y 返回变换后点的坐标 Hor x HorCord Ver y VerCord 返回 4 19 static void OriginStatement void dou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GB-T 40826-2021分梳山羊绒手排长度试验方法 图板电子扫描仪法》专题研究报告
- 会展设计师成果转化竞赛考核试卷含答案
- 2025年消防安全考试(危化场所)及答案
- 水文水井钻探工安全生产基础知识评优考核试卷含答案
- 压电石英晶体切割工安全行为强化考核试卷含答案
- 稀土废液回收工安全意识测试考核试卷含答案
- 饲料加工工安全管理评优考核试卷含答案
- 酶制剂制造工安全规程强化考核试卷含答案
- 选煤干燥工工艺技术规程
- 加油站操作员岗前理论综合技能考核试卷含答案
- 苏教版四年级上册《综合实践活动》全部教案
- 2025年上海市中考语文备考之文学常识汇编
- 插花艺术知到智慧树期末考试答案题库2025年北华大学
- 2025年山东省重点高中中考自主招生化学试卷试题(含答案)
- 中医八纲辩证课件
- 传染病模型研究与应用
- 编制竣工资料协议书
- 变压器绝缘测试评分表
- 2025年宁夏银川经开发展集团有限责任公司招聘笔试参考题库含答案解析
- 职业规划:养猪行业
- 空桶回收协议
评论
0/150
提交评论