Python自制编程语言解释器

 目录

1.原理

2.Cherry解释器

部分代码如下

Cherry基本语法如下

文件后缀名

现已完成功能

1.基本变量定义

2.Print输出

3.相加相减

相减


为什么说玩玩就行?用解释语言去做一个解释语言可想而知!你这运行速度得多慢?什么?编译语言?算了吧,还是用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联系我,共同探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pymili

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值