1 / 20
文档名称:

实验三语义分析.ppt

格式:ppt   大小:425KB   页数:20页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实验三语义分析.ppt

上传人:陈潇睡不醒 2021/1/11 文件大小:425 KB

下载得到文件列表

实验三语义分析.ppt

文档介绍

文档介绍:*
语法制导翻译绘制函数图形
《编译原理》上机作业(3)
*
简单复****br/>--------------- 函数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的轨迹
词法分析器:
识别输入序列,并为语法分析器提供记号。
语法分析器:
根据记号流识别句子,并为表达式构造语法树。
语义分析器:
根据语言结构,处理函数绘图语言程序的语义。
*
1. 表达式值的计算:深度优先后序遍历语法树
2. 图形的绘制:画出每个坐标点
绘图所需的语义处理:
语法制导翻译绘制图形
<1> 从origin、rot和scale中得到坐标变换所需的信息;
<2> for_draw语句根据t的每一个值进行如下处理:
a) 计算被绘制点的横、纵坐标值;
b) 根据坐标变换信息进行坐标变换,得到实际坐标;
c) 根据点的实际坐标画出该点。
绘图语言的语义
*
语法制导翻译的基本步骤
<1> 为文法符号设计属性();
<2> 设计语义规则中所需的辅助函数;
<3> 为产生式设计语义规则(不考虑实现时是语法制导定义)。
比例设置语句的文法如下:
ScaleStatment → SCALE IS
L_BRACKET Expression COMMA Expression R_BRACKET
可简写为:S→ SCALE IS (E,E)
此语句的作用是提供横、纵坐标的比例因子。因此:
<1> 设计属性:.,分别保存比例因子;
<2> 设计计算表达式值的辅助函数:
get_value(nptr),它返回表达式的值;
<3> 设计语义规则:
S→ SCALE IS (E1,E2) :=get_value();
:=get_value();
*
语义函数的设计
<1> 全程变量:(类似于设计属性)
double Parameter=0; // 为参数T分配的变量
double Origin_x=, Origin_y=; // 用于记录平移距离
double Rot_ang=; // 用于记录旋转角度
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));
*
<2> 辅助语义函数
a) 计算表达式的值:深度优先后序遍历语法树
double GetExprValue(struct ExprNode * root);
b)** 计算点的坐标值:首先获取坐标值,然后进行坐标变换
static void CalcCoord( struct ExprNode * Hor_Exp,
struct ExprNode * Ver_Exp,
double &Hor_x,
double &Ver_y);
c) 绘制一个点(与环境有关):
void DrawPixel(unsigned long x, unsigned long y);
d) 循环绘制所有的点:
void DrawLoop( double Start,
double End,
double Step,
struct ExprNode * HorPtr,
struct ExprNode