编译原理上机——函数绘图语言(一)

简介

这是编译原理的一个上机作业,需要写一个解释器,用于运行函数绘图语言,我会持续更新至该上机结束,希望大家及时指出我程序的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(目标语言).

正片开始

支持库说明

mathPython数学函数支持库
re匹配正则表达式,也就是匹配正规式
os系统调用,在此主要用来获得当前路径
ast生成Python语法树库
astunparseast生成的语法树变得更漂亮
turtlePython海龟库,用于画图
numpyPython科学计算库,在此主要用于解决range不支持小数问题


astastunparse库在编译器和解释器中均未使用,只是在语法分析输出语法树的时候作为语法树的生成器和排版器使用

相关篇目

编译原理上机——函数绘图语言(二):词法分析器
编译原理上机——函数绘图语言(三):语法分析器
编译原理上机——函数绘图语言(四):语义分析器
编译原理上机——函数绘图语言(五):编译器与解释器
完整代码
Gitee开源代码

小提示

为了方便起见,我将所有代码一次总结在编译原理上机——函数绘图语言(五):编译器与解释器附录中并且上传为优快云付费资源完整代码,如有需要,直接跳转 😃

BUG说明

这一部分会持续更新

  1. 符号表中0~9都是不需要的;
  2. 注释中E->E;是错的,应该改为E->T;E|ε,其中T为一个表达式,如: 5 ∗ ln ⁡ ( 10 ) 5*\ln(10) 5ln(10)
  3. 这个词法分析器不能算表型词法分析器;

完结

😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FishPotatoChen

谢谢您的支持,我会更努力的~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值