使用Python实现的简单函数绘图语言的解释器。
本解释器分为词法分析、语法分析、语义分析三个部分。其中语法分析使用递归下降子程序的方法实现。
在各个步骤之间都有输出中间结果。
语法类型
支持的语句包含四类,分别是:
循环绘图语句 FOR-DRAW
语法:
FOR T FROM 起点 TO 终点 STEP 步长 DRAW(横坐标,纵坐标);
语义:令T从起点到终点,每次改变一个步长,绘制出由(横坐标,纵坐标)所规定的点的轨迹。
举例:
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW(COS(T),SIN(T));
说明:绘制一个原点在(0,0)的单位圆
比例设置语句 SCALE
语法:
SCALE IS (横坐标比例因子,纵坐标比例因子);
语义:设置横纵坐标的比例,并分别按照比例因子进行变化。
举例:
SCALE IS (100,100);
说明:将横纵坐标的比例设置为1:1,并且放大100倍。
坐标平移语句 ORIGIN
语法:
ORIGIN IS (横坐标,纵坐标);
语义:将坐标系的原点平移到横坐标和纵坐标规定的点处。
举例:
ORIGIN IS (360,240);
说明:将原点从(0,0)平移到(360,240)处。
角度旋转语句 ROT
语法:
ROT IS 角度;
语义:逆时针旋转角度所规定的弧度值。
举例:
ROT IS PI/2;
说明:逆时针旋转
PI/2
,即逆时针旋转90度。
本解释器分为词法分析、语法分析、语义分析三个部分。其中语法分析使用递归下降子程序的方法实现。
词法分析器
词法分析器的三个任务:
- 滤掉源程序中的无用成分;
- 输出记号供语法分析器使用;
- 识别非法输入,并将其标记为“出错记号”。
记号的语法和语义
常数
常数字面量和标识符形式的长两名均称为常数。需要支持pi, E这样的常量。
参数
本作图语言中唯一的、已经被定义好的变量名T被称为参数。本次实验不要求。
函数
为简单起见,当前函数调用仅支持Sin, Cos, Tan, Sqer, Exp, Ln
它们的接口一致,都是接收一个浮点类型参数,返回一个浮点类型参数。
保留字
语句中具有固定含义的标识符,包括:
ORIGIN, SCALE, ROT, IS, TO, STEP, DRAW, FOR, FROM
运算符
- / **
分隔符
; , ( )
记号的设计
记号的组成:类别和属性。这里使用枚举类型来表示记号的类别。