前言
我做过一个编程语言:mylang
开始
其实应该先将if,但是为了保持"先讲解单分支结构,后讲多分支结构"的理念,把if过了
源代码
def parse_while(block):
global status
try:
foo = block.split('\n')[0][6:-2]
except:
return ['error','WhileSentenceError:wrong initial']
while(1):
F = comp(foo)
if(F[0] == 'error'):
return F
if(not F[0]):
break
for i in block.split('\n')[1:-1]:
i = i.strip()
val = comp(i)
if(val[0] == 'error'):
return val
if(status == MYL_BREAK_STATUS):
status = MYL_NONE_STATUS
return ['']
return ['']
关于status全局变量,见
[用python自制编程语言]第2篇
参数
block
:代码
一开始
try:
foo = block.split('\n')[0][6:-2]
except:
return ['error','WhileSentenceError:wrong initial']
要理解这里,看for的语法:
while(<foo>){
<code>
}
这里block.split('\n')[0]
就是while(<foo>){
这行,6:-2则是<foo>
所以这里是求<foo>
用的
往后
while(1):
F = comp(foo)
if(F[0] == 'error'):
return F
if(not F[0]):
break
for i in block.split('\n')[1:-1]:
i = i.strip()
val = comp(i)
if(val[0] == 'error'):
return val
if(status == MYL_BREAK_STATUS):
status = MYL_NONE_STATUS
return ['']
分开看
一开始
F = comp(foo)
if(F[0] == 'error'):
return F
if(not F[0]):
break
检查表达式<foo>
往后
for i in block.split('\n')[1:-1]:
i = i.strip()
val = comp(i)
if(val[0] == 'error'):
return val
if(status == MYL_BREAK_STATUS):
status = MYL_NONE_STATUS
return ['']
执行代码,并特判break
最后
return ['']
结束
总结一下
作者
hit-road
拜拜,下课!
hit-road不定期跟新,不见不散!