一、 实验目的
通过做上机题加深对编译器构造原理和方法的理解,巩固所学知识。
(1) 会用正规式设计简单语言的词法;
(2)会用产生式设计简单语言的语法
(3) 会用递归下降子程序编写编译器或解释器;
(4) 会写上机报告。
为简单的函数绘图语言编写一个解释器。该解释器接受用绘图语言编写的源程序,经过语法和语义分析后,直接将源程序所规定的图形显示在显示屏(或显示窗口)中。
作业的目的是:通过自己动手编写解释器,掌握语言翻译,特别是语言识别的基本方法。
二.函数绘图语言简介
五种语句
循环绘图语句:(FOR-DRAW)
for T from 0 to 200 step 1 draw(t,0) 横坐标的轨迹 纵坐标为零 for T from 0 to 150 step 1 draw(0,-t) 纵坐标的轨迹 横坐标为零 for T from 0 to 120 step 1 draw(t,-t) 函数f(t)=t的轨迹
比例设置:(SCALE)
scale is (1,1)设置横坐标和纵坐标的比例
角度旋转:(ROT)
ROT is 0 旋转角度为0 即不旋转
坐标平移:(ORIGIN)
origin is (100,300) 原点的偏移量
注释:(–或者//)
坐标系:
左上角为原点
x方向从左向右增长
y方向从上到下增长
词法分析器
词法分析器的作用是规定单词形成的规则,并且根据这个规则来识别输入序列,这个过程也被称为词法分析。
四个任务
1.识别记号,并共语法分析器使用
2.处理与平台相关的输入
3.过滤掉源程序中的无用成分 如 注释
4.识别非法输入 并报告错误
区分记号的符号表,我们识别记号就是基于这个表来识别
设计出正规式,用来早NFA,并对NFA进行确定化和最小化,形成DFA
DFA结构,写代码根据这个DFA来识别记号
WHITE_SPACE(白空)没有出现在DFA中。处理办法:借鉴老师的做法,在程序中识别到白空(空格 回车 制表符)时直接跳过