编译原理 上机实践之语法制导翻译绘制函数图形.pptVIP

  • 27
  • 0
  • 约8.12千字
  • 约 30页
  • 2018-06-24 发布于四川
  • 举报

编译原理 上机实践之语法制导翻译绘制函数图形.ppt

编译原理 上机实践之语法制导翻译绘制函数图形

简单复习 2.3.3 语法制导翻译绘制图形 例子:比例设置语句的语义设计 2.3.3.2 语义函数的设计 1 全程变量(续) 2 辅助语义函数 3 辅助语义函数设计举例 a) 表达式值的计算 b) 计算点的坐标值: d) 点轨迹的循环绘制 2.3.3.3 递归子程序中语义规则的嵌入 OriginStatement b) ForStatement 2.3.3.4 解释器的源程序组织(看实际环境) 2.3.3.5 解释器主程序的生成 2.3.3.6 测试例程与测试结果(略) 2.5 上机题的改进建议 2.5.2 语法制导翻译中继承的不同实现方法 用类实现继承 用类实现继承(续) 用过程实现继承 用过程实现继承(续) 用编译开关实现继承 体会: 2.5.2 Lex/Yacc编写解释器简介 2.5.2 Lex/Yacc编写解释器简介(续) Lex源程序(*.l) Yacc源程序(*.y) 发挥你的聪明才智! 参考文献 表达式值的计算(深度优先后序遍历) * 语法制导翻译绘制函数图形 《编译原理》上机作业(3) --------------- 函数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的轨迹 词法分析器: 识别输入序列,并为语法分析器提供记号。 语法分析器: 根据记号流识别句子,并为表达式构造语法树。 语义分析器: 根据语言结构,处理函数绘图语言程序的语义。 表达式值的计算:深度优先后序遍历语法树 图形的绘制:画出每个坐标点 绘图所需的语义处理: 从origin、rot和scale中得到坐标变换所需的信息; for_draw语句根据t的每一个值进行如下处理: 计算被绘制点的横、纵坐标值; 根据坐标变换信息进行坐标变换,得到实际坐标; 根据点的实际坐标画出该点。 2.3.3.1 绘图语言的语义 语法制导翻译的基本步骤 为文法符号设计属性; 设计语义规则中所需的辅助函数; 为产生式设计语义规则。 文法:ScaleStatment → SCALE IS L_BRACKET Expression COMMA Expression R_BRACKET 可简写为:S → SCALE IS (E,E) 它的作用是提供横、纵坐标的比例因子。 因此需要: 设计属性:.x和.y,分别保存比例因子; 设计计算表达式值的辅助函数: GetExprValue(nptr),它返回表达式树的值; 设计语义规则: S → SCALE IS (E1,E2) S.x:=GetExprValue(E1.nptr); S.y:=GetExprValue(E2.nptr); 1 全程变量: 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); scale is (50, 50); for t from 0 to 2*pi step pi/100 draw(cos(t), sin(t)); scale is (100, 100); for t from 0 to 2*pi step pi/200 draw(cos(t), sin(t)); // Origin_x=350,Origin_y=220 // Scale_x=50,Scale_y=50 // Scale_x=100,Scale_y=100 b) 计算点的坐标值:首先获取坐标值,然后进行坐标变换 static void CalcCoord( struct ExprNode * x_nptr, struct ExprNode * y_nptr, double x_val, double y_val); c) 绘制一个点(与环境有关): void DrawPixel(unsigned long x, unsig

文档评论(0)

1亿VIP精品文档

相关文档