A Simple Interpreter

使用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度。

本解释器分为词法分析、语法分析、语义分析三个部分。其中语法分析使用递归下降子程序的方法实现。

词法分析器

词法分析器的三个任务:

  1. 滤掉源程序中的无用成分;
  2. 输出记号供语法分析器使用;
  3. 识别非法输入,并将其标记为“出错记号”。

记号的语法和语义

  • 常数

    常数字面量和标识符形式的长两名均称为常数。需要支持pi, E这样的常量。

  • 参数

    本作图语言中唯一的、已经被定义好的变量名T被称为参数。本次实验不要求。

  • 函数

    为简单起见,当前函数调用仅支持Sin, Cos, Tan, Sqer, Exp, Ln

    它们的接口一致,都是接收一个浮点类型参数,返回一个浮点类型参数。

  • 保留字

    语句中具有固定含义的标识符,包括:

    ORIGIN, SCALE, ROT, IS, TO, STEP, DRAW, FOR, FROM

  • 运算符

        • / **
  • 分隔符

    ; , ( )

记号的设计

记号的组成:类别和属性。这里使用枚举类型来表示记号的类别。

0%