版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,语法地图翻译绘制函数图形,编译原理机械操作(3),2,简单复习,-函数f(t)=t的图形originis (2 -原点的偏移设置为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的轨迹,词法分析器:标识输入序列,为解析器提供令牌。解析器:根据令牌流识别句子,并构建表达
2、式的语法树。语义分析器:根据语言结构处理函数绘图语言程序的语义。3,1。表达式值计算:深度优先级遍历语法树2。图形绘制:绘制每个坐标点,处理绘图所需的语义:绘制2.3.3语法刘涛翻译图形,从origin、rot和scale获取坐标转换所需的信息,For_draw语句根据t的每个值进行如下处理:a)计算绘制点的横坐标。b)根据坐标转换信息转换坐标,以获得实际坐标。c)根据点的实际坐标绘制点。2.3.3.1绘图语言的意义,4,语法指南翻译的基本步骤,语法符号的属性设计();设计语义规则所需的辅助函数。设计用于创建的语义规则(定义语法制度,而不考虑实施情况)。设置比例语句的语法如下:scale st
3、atment scale is l _ bracket expression comma expression r _ bracket如下所示:S SCALE IS (E,E)此语句的作用是提供以下内容,因此设计属性:x和。y,分别储存比例系数。设计计算表达式值的辅助函数:返回表达式的值的get _ value(nptr);设计语义规则:sscaleis (E1,E2)s . x :=get _ value(E1 . nptr);s . y :=get _ value(E2 . nptr);5,2.3.3.2语义函数设计,完整变量: (类似于设计属性)double Parameter=0;/参
4、数t中指定的变量doubleorigin _ x=0.0,origin _ y=0.0/记录平移距离double Rot _ ang=0.0/用于记录旋转角度。double Scale_x=1,Scale _ y=1;/用于记录比例因子。范例:以点(350,220)为中心绘制两个同圆心圆origines(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,1
5、00);/Scale_x=100,Scale _ y=100 for t from 0 to 2 * pi step pi/200 draw(cos(t),sin (t),b)*计算点坐标值:首先获取坐标值,然后转换坐标static void calccoord(struct expr node * hor _ exp,struct expr node * ver _ exp,)/参数t的存储空间double x,y;for(Parameter=Start;Parameter=Endparameter=step)calc coord(hor ptr,ver ptr,x,y);/计算实际坐标dr
6、awpixel (unsignedlong) x,(unsigned long)y);/根据坐标绘制点。在8,2.3.3.3迭代子程序中,语义规则的包含,a)origin statement b)for statement,语义规则可以包含在迭代子程序中的任何位置。根据语法指导翻译的基本思想,如果想从一些语言结构中获得意义,相应的语义规则可以紧跟在该结构的语法分析之后。,9,2.3.3.4解释程序的主程序(略)2.3.3.5测试例程和测试结果(略)2.3.3.6解释程序的源程序组织(查看实际环境),程序的冗余比资源的物理位置与逻辑位置无关。合理配置有助于团队合作和回归测试的资源。辅助信息同样重
7、要。改进10,2.5飞机问题的建议,2.5.1函数绘图语言的扩展修改显示的直角坐标系,使其与熟悉的坐标系一致。扩展语句类型,以便用户指定图形颜色。展开循环绘图语句,以便For_draw语句嵌套。加入文字方块,以便您可以将文字描述加入至图面。您可以加入清理功能,以使图表具有简单的动画效果。11,2.5.2使用面向对象的技术实现解释器。语法刘涛翻译的本质是体现在面向对象编程方法中的继承关系。,类主程序,习惯:服务提供者(server)类请求服务(client)主程序,词法分析:语义分析:12,static void for statement (void)/起点、终点、步骤#endif、match
8、 token(FOR);MatchToken(T);MatchToken(FROM);start _ ptr=Expression();/开始表达式的语法树MatchToken(TO);end _ ptr=Expression();/结束表达式的语法树matcht oken(STEP);step _ ptr=Expression();/步骤表达式的语法树matcht oken(DRAW);MatchToken(L _ BRACKET);x _ ptr=Expression();match token(COMMA);y _ ptr=Expression();MatchToken(R _ BRAC
9、KET);# ifndefparser _ 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);DelExprTre
10、e(x _ ptr);DelExprTree(y _ ptr);#endif,13,类机构tree _ node _ ptrstart _ ptr,end _ ptr,step _ ptr,x _ ptr,y _;void FOR _ statement _ syntax()/FOR _ statement语法分析match _ token(FOR);match _ token(T);Match _ token(开始);start _ ptr=expression();match _ token(TO);end _ ptr=expression();Match _ token(步骤);step
11、 _ 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的语义分析doublestart _ val,end _ val,step _/解析每个表达式的语法树start _ val=getexprvalue(start _ ptr);/计算每
12、个表达式的值,然后绘制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 _ ptrstart _ ptr,end _ p
13、tr,step _ ptr,x _ ptr,y _ ptr,anglematch _ token(T);Match _ token(开始);start _ ptr=expression();match _ token(TO);end _ ptr=expression();Match _ token(步骤);step _ ptr=expression();match _ token(DRAW);match _ token(L _ BRACKET);x _ ptr=expression();match _ token(COMMA);y _ ptr=expression();match _ toke
14、n(R _ BRACKET);void interpreter _ class 33603360 for _ statement()/派生类的for _ statement doublestart _ val,end _ parts/解析每个表达式的语法树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
15、_ ptr);DelExprTree(start _ ptr);/可用空间DelExprTree(end _ ptr);DelExprTree(step _ ptr);DelExprTree(x _ ptr);DelExprTree(y _ ptr);15,编程方法与编程语言支持方法不可避免地联系在一起。C对C的发展不仅扩展了对面向对象方法的支持,还扩展了常量定义、原始机制、异常处理等。灵活地利用c提供的机制,可以提高程序的可读性和可维护性。,发挥你的智力!16,double get expr value(struct expr node * root)if(root=null)return 0.0;switch(root-opcode)case plus : return get exprvalue(root-content . case operator . left)get exprvalue case minue./其他二进制操作类似于case power : return pow(get expr value(root-content . case ope
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区专干考试题型及答案
- 社会化营销试题及答案
- 青海遴选考试题库及答案
- 广东省深圳市龙岗区2025-2026学年三年级上学期期末学业测试数学试题(含答案)
- 吉林省吉林市蛟河市2025-2026学年七年级上学期1月期末考试语文试卷(含答案)
- 广东省深圳市龙岗区2024-2025学年上学期八年级地理期末学业质量监测试题(含答案)
- 2026 年初中英语《名词》专项练习与答案 (100 题)
- 车险理赔沟通培训课件
- 帕金森节目题目及答案
- 2026年大学大二(建筑环境与能源应用工程)暖通空调系统设计综合测试题及答案
- 2022-2023学年五年级数学上册第五单元:列方程解行程问题专项练习(含答案)
- 物业工程维修培训内容
- 神经外科规培结业考试题库及答案
- 广东省领航高中联盟2024-2025学年高一下学期第一次联合考试语文试卷(含答案)
- 社区健康服务与管理课件
- 投资车行合同协议书
- 国际消防安全系统规则
- 静脉治疗新理念
- 高中研究性学习指导课课件系列总结阶段-学生如何开展研究活动
- 民办职业培训方案模板
- 04S519小型排水构筑物(含隔油池)图集
评论
0/150
提交评论