简介
这是编译原理的一个上机作业,需要写一个解释器,用于运行函数绘图语言,我会持续更新至该上机结束,希望大家及时指出我程序的bug. 😄
联系方式
email:FishPotatoChen@163.com
函数绘图语言介绍
5种语句
- 循环绘图(FOR-DRAW)
- 比例设置(SCALE)
- 角度旋转(ROT)
- 坐标平移(ORIGIN)
- 注释(--或//)
参数默认值
默认值:
origin is (0, 0);
rot is 0;
scale is (1, 1);
屏幕(窗口)的坐标系
- 左上角为原点
- x方向从左向右增长
- y方向从上到下增长(与一般的坐标系方向相反)
语言举例
--------------- 函数f(t)=t的图形
origin is (100, 300); -- 设置原点的偏移量
rot is 0; -- 设置旋转角度(不旋转)
scale is (1, 1); -- 设置横坐标和纵坐标的比例
for T from 0 to 200 step 1 draw (t, 0);
-- 横坐标的轨迹(纵坐标为0)
for T from 0 to 150 step 1 draw (0, -t);
-- 纵坐标的轨迹(横坐标为0)
for T from 0 to 120 step 1 draw (t, -t);
-- 函数f(t)=t的轨迹
编译原理介绍
6+2图
本次实验需要编写词法分析器、语法分析器、语义分析器.
我还会在此基础上编写编译器,将函数绘图语言转换为Python(目标语言).
正片开始
支持库说明
math
Python数学函数支持库
re
匹配正则表达式,也就是匹配正规式
os
系统调用,在此主要用来获得当前路径
ast
生成Python语法树库
astunparse
将ast
生成的语法树变得更漂亮
turtle
Python海龟库,用于画图
numpy
Python科学计算库,在此主要用于解决range
不支持小数问题
ast
和astunparse
库在编译器和解释器中均未使用,只是在语法分析输出语法树的时候作为语法树的生成器和排版器使用
相关篇目
编译原理上机——函数绘图语言(二):词法分析器
编译原理上机——函数绘图语言(三):语法分析器
编译原理上机——函数绘图语言(四):语义分析器
编译原理上机——函数绘图语言(五):编译器与解释器
完整代码
Gitee开源代码
小提示
为了方便起见,我将所有代码一次总结在编译原理上机——函数绘图语言(五):编译器与解释器的附录中并且上传为优快云付费资源完整代码,如有需要,直接跳转 😃
BUG说明
这一部分会持续更新
- 符号表中0~9都是不需要的;
- 注释中
E->E;
是错的,应该改为E->T;E|ε
,其中T
为一个表达式,如: 5 ∗ ln ( 10 ) 5*\ln(10) 5∗ln(10); - 这个词法分析器不能算表型词法分析器;
完结
😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄