前言
今天比较短哈
我做过一个编程语言: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变量。
这个变量是为了break
和continue
专门设计的,是为了break
和continue
不能一次行操控所有循环,还有就是循环嵌套会用这个进行管理。
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不定期跟新,不见不散!