目录
为什么说玩玩就行?用解释语言去做一个解释语言可想而知!你这运行速度得多慢?什么?编译语言?算了吧,还是用C或者C++来实现吧!
本次作者写了一个Python仿制"解释器",没有多大功能但是玩玩还是有意思的!
一切都是心血来潮!
1.原理
解释性的语言基本步骤都一样: 1.读取文件一行 ——> 将此行交给语法解释器 ——> 查找错误然后转换为目标语言
这个程序基本操作就是如此!open读取用户指定的文件内容,然后一行一行用 if 比对。条件达成就转换成Python语言。
你问我有多慢?我也不知道!
2.Cherry解释器
这就是呈现的一个效果图,你问我写了多久?一天
实现了功能有:变量赋值,输出,加法计算,减法计算。
部分代码如下
# 整数类型
var_int = re.search('(.*?)=<(\d+\.?\d*)>;', read, re.S)
# 判断整数
if not var_int:
varint = 0
else:
varint = var_int.group(2)
var[f'{var_int.group(1)}']=int(var_int.group(2))
# 字符串类型
var_str = re.search('(.*?)="(.*?)"', read, re.S)
# 判断字符串
if not var_str:
varstr = ""
else:
varstr = var_str.group(2)
var[f'{var_str.group(1)}']=f'{var_str.group(2)}'
# var and var
var_var = re.search('(.*?)=(.*?)', read, re.S)
if not var_var:
var_var = None
else:
for key, msg in var.items():
if var_var.group(2) == key:
msg=var[var_var.group(2)]
var[f'{var_var.group(1)}']=msg
# plus函数中的数字相加
plus_int = re.search(r'(.*?)=plus_int<(\d+\.?\d*), (\d+\.?\d*)>;', read, re.S)
if not plus_int:
plus_int=None
else:
var[f'{plus_int.group(1)}']=int(plus_int.group(2))+int(plus_int.group(3))
# plus函数获取var值相加
plus_var = re.search(r'(.*?)=plus_var<(.*?), (.*?)>', read, re.S)
if not plus_var:
plus_var = ""
else:
try:
for key, num in var.items():
if plus_var.group(2) == key and plus_var.group(3) == key:
nums = eval(var[plus_var.group(2)]) + eval(var[plus_var.group(3)])
var[f'{plus_var.group(1)}']=nums
except:
print(Fore.RED+"ErrorVar:请查看你的变量名或数据类型是否正确!")
# reduce减
reduce = re.search(r'(.*?)=reduce<(\d+\.?\d*), (\d+\.?\d*)>;', read, re.S)
if not reduce:
reduce=None
else:
var[f'{reduce.group(1)}']=eval(reduce.group(2))-eval(reduce.group(3))
# reduce var
reduce_var = re.search(r'(.*?)=reduce_var<(.*?), (.*?)>;', read, re.S)
if not reduce_var:
reduce_var=None
else:
try:
for key, num in var.items():
if reduce_var.group(2) == key and reduce_var.group(3) == key:
redces = eval(var[reduce_var.group(2)]) - eval(var[reduce_var.group(3)])
var[f'{reduce_var.group(1)}']=redces
except:
print(Fore.RED+"ErrorVar:请查看你的变量名或数据类型是否正确!")
就一个re库搭配起来玩,主要目的是学习嘛,有想法就可以做出来!虽然做的不怎么样.....
Cherry基本语法如下
文件后缀名
任何后缀名文件都可以识别运行!只要写了一样的代码!
配置Cherry变量环境后windows终端输入:Cherry -r 此处填写要编译的文件
现已完成功能
1.基本变量定义
var_int=<此处填写数字>; 简介:这是一句赋值数字的语句
var_str="此处填写字符串"; 简介:这是一句赋值字符串语句
var_var=var_str; 简介:这是赋值变量名给变量的语句
2.Print输出
var_str="Hello Cherry ! Hello PYmil !";
Print Var var_str; 简介:这是输出上方变量的值
Print_Str "此处填写字符串"; 简介:这是输出字符串语句
Print_Int <此处填写数字>; 简介:这是输出数字的语句
3.相加相减
相加
Number=plus_int<此处填写数字一, 此处填写数字二>; 简介:进行整数数字计算<>处两数以符号","相隔","后面要有一个空格
Var=plus_var<变量名1, 变量名2>; 简介:计算两个变量名中的值
相减
num=reduce<数字一, 数字二>; 简介:两数相减
nums=reduce_var<变量1, 变量2> 简介:你猜!
剩下还没完善,GitHub地址为:Cherry [樱花是红色的]
可以下载解释器来玩玩,配置和变量环境就好了!
可以加群:706128290联系我,共同探讨!