[用python自制编程语言]第6篇

第6篇:关于不止一行代码的处理部分讲解总结,设计调度代码

前言

今天比较短哈
我做过一个编程语言:mylang

开始

上代码

def block_parse(block):
    global blockSta
    s = block.split('\n')[0]
    if(s.startswith('for(') and s.endswith('){')):
        blockSta.push('for')
        res = parse_for(block)
        blockSta.pop()
        return res
    elif(s.startswith('if(') and s.endswith('){')):
        res = parse_if(block)
        return res
    elif(s.startswith('while(') and s.endswith('){')):
        blockSta.push('while')
        res = parse_while(block)
        blockSta.pop()
        return res
    elif(s == 'try{'):
        res = parse_try(block)
        return res
    else:
        return ['error','TrySentenceError:find undefined branch head']
    return ['']

参数
block:代码


这里的话应该很简单,所以就不讲解了,呵呵😄。
哦不,还是要讲一下的,主要是blockSta变量。


这个变量是为了breakcontinue专门设计的,是为了breakcontinue不能一次行操控所有循环,还有就是循环嵌套会用这个进行管理。


blockSta是一个栈,其中记录从层级低到高,记录每一层。
栈的类型是mylangDatatypes.py中的stack类,源码:

class stack:
    def __init__(self,initial = []):
        self._stack = initial
    def __add__(self,b):
        if(isinstance(b,stack)):
            return stack(self._stack + b._stack)
        elif(isinstance(b,list)):
            showWarning('DeprecationWarning','Stack+List method not suggested')
            return stack(self._stack + b)
        else:
            return stack(self._stack + [b])
    def push(self,val):
        self._stack.append(val)
    def pop(self):
        return self._stack.pop(-1)

这一部分设计已经完成了,后面就是零碎的一些附加物件了。

作者

hit-road

拜拜,下课!

hit-road不定期跟新,不见不散!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值