资源描述:
《实验三语义分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、语法制导翻译绘制函数图形《编译原理》上机作业(3)1简单复习---------------函数f(t)=t的图形originis(200,300);--设置原点的偏移量rotispi/6;--设置旋转角度scaleis(2,1);--设置横坐标和纵坐标的比例forTfrom0to200step1draw(t,0);--横坐标的轨迹forTfrom0to180step1draw(0,-t);--纵坐标的轨迹forTfrom0to150step1draw(t,-t);--f(t)=t的轨迹词法分析器
2、:识别输入序列,并为语法分析器提供记号。语法分析器:根据记号流识别句子,并为表达式构造语法树。语义分析器:根据语言结构,处理函数绘图语言程序的语义。21.表达式值的计算:深度优先后序遍历语法树2.图形的绘制:画出每个坐标点绘图所需的语义处理:2.3.3语法制导翻译绘制图形<1>从origin、rot和scale中得到坐标变换所需的信息;<2>for_draw语句根据t的每一个值进行如下处理:a)计算被绘制点的横、纵坐标值;b)根据坐标变换信息进行坐标变换,得到实际坐标;c)根据点的实际坐标画出该
3、点。2.3.3.1绘图语言的语义3语法制导翻译的基本步骤<1>为文法符号设计属性();<2>设计语义规则中所需的辅助函数;<3>为产生式设计语义规则(不考虑实现时是语法制导定义)。比例设置语句的文法如下:ScaleStatment→SCALEISL_BRACKETExpressionCOMMAExpressionR_BRACKET可简写为:S→SCALEIS(E,E)此语句的作用是提供横、纵坐标的比例因子。因此:<1>设计属性:.x和.y,分别保存比例因子;<2>设计计算表达式值的辅助函数:ge
4、t_value(nptr),它返回表达式的值;<3>设计语义规则:S→SCALEIS(E1,E2)S.x:=get_value(E1.nptr);S.y:=get_value(E2.nptr);42.3.3.2语义函数的设计<1>全程变量:(类似于设计属性)doubleParameter=0;//为参数T分配的变量doubleOrigin_x=0.0,Origin_y=0.0;//用于记录平移距离doubleRot_ang=0.0;//用于记录旋转角度doubleScale_x=1,Scale_
5、y=1;//用于记录比例因子例:以点(350,220)为圆心绘制两个同心园originis(350,220);//Origin_x=350,Origin_y=220scaleis(50,50);//Scale_x=50,Scale_y=50fortfrom0to2*pisteppi/100draw(cos(t),sin(t));scaleis(100,100);//Scale_x=100,Scale_y=100fortfrom0to2*pisteppi/200draw(cos(t),sin(t)
6、);5<2>辅助语义函数a)计算表达式的值:深度优先后序遍历语法树doubleGetExprValue(structExprNode*root);b)**计算点的坐标值:首先获取坐标值,然后进行坐标变换staticvoidCalcCoord(structExprNode*Hor_Exp,structExprNode*Ver_Exp,double&Hor_x,double&Ver_y);c)绘制一个点(与环境有关):voidDrawPixel(unsignedlongx,unsignedlongy
7、);d)循环绘制所有的点:voidDrawLoop(doubleStart,doubleEnd,doubleStep,structExprNode*HorPtr,structExprNode*VerPtr);6<3>辅助语义函数设计举例a)表达式值的计算b)点轨迹的循环绘制voidDrawLoop(doubleStart,doubleEnd,doubleStep,structExprNode*HorPtr,structExprNode*VerPtr){externdoubleParameter;
8、//参数T的存储空间doublex,y;for(Parameter=Start;Parameter<=End;Parameter+=Step){CalcCoord(HorPtr,VerPtr,x,y);//计算实际坐标DrawPixel((unsignedlong)x,(unsignedlong)y);//根据坐标绘制点}}72.3.3.3递归子程序中语义规则的嵌入a)OriginStatementb)ForStatement语义规则可以嵌入在递归子程序的任何位置。根据语法制导翻译的基本思想,如