序文
私はプログラミング言語を実行しました:mylang
開始
コードをアップロード
def split_subBlocks(block):
subBlocks = []
cnt = 0
buf = ''
flag = False
for i in block:
if(i == '{'):
cnt += 1
flag = True
elif(i == '}'):
cnt -= 1
flag = True
if(cnt == 0 and flag):
subBlocks.append(buf)
buf = ''
flag = False
else:
buf += i
subBlocks[-1] += '}'
return subBlocks
# ......N行之后......
def parse_if(block):
subBlocks = split_subBlocks(block)
if(subBlocks[0] == 'error'):
return subBlocks
for i in subBlocks:
if(i.startswith('if')):
foo = i.split('\n')[0][3:-2]
elif(i.startswith('elsif')):
foo = i.split('\n')[0][6:-2]
elif(i.startswith('else')):
foo = 'true'
else:
return ['error','IfSentenceError:find undefined branch head']
code = [j.strip() for j in i.split('\n')[1:-1]]
F = comp(foo)
if(F[0] == 'error'):
return F
if(F[0]):
for i in code:
val = comp(i)
if(val[0] == 'error'):
return val
return ['']
return ['']
パラメータ
block
:コード
初めに
subBlocks = split_subBlocks(block)
if(subBlocks[0] == 'error'):
return subBlocks
ここで、if、elsif、elseの各ブロックを分離するには、split_subBlocksのコードを見てください。
def split_subBlocks(block): subBlocks = [] cnt = 0 buf = '' flag = False for i in block: if(i == '{'): cnt += 1 flag = True elif(i == '}'): cnt -= 1 flag = True if(cnt == 0 and flag): subBlocks.append(buf) buf = '' flag = False else: buf += i subBlocks[-1] += '}' return subBlocks
最初の部分
def split_subBlocks(block): subBlocks = [] cnt = 0 buf = ''
ここで、変数subBlocks(ブロック)、cnt(ペアになるブラケットの数)、buf(セグメント化されていない文)を定義します。
第二部
for i in block: if(i == '{'): cnt += 1 flag = True elif(i == '}'): cnt -= 1 flag = True if(cnt == 0 and flag): subBlocks.append(buf) buf = '' flag = False else: buf += i
パートII-1
if(i == '{'): cnt += 1 flag = True elif(i == '}'): cnt -= 1 flag = True
中括弧の数を数える
パート2-2
if(cnt == 0 and flag): subBlocks.append(buf) buf = '' flag = False
セグメント化できる場合は、セグメント化
パートII-3
else: buf += i
セグメント化できない場合は、セグメント化されていない文として記録します
後ろに
for i in subBlocks:
if(i.startswith('if')):
foo = i.split('\n')[0][3:-2]
elif(i.startswith('elsif')):
foo = i.split('\n')[0][6:-2]
elif(i.startswith('else')):
foo = 'true'
else:
return ['error','IfSentenceError:find undefined branch head']
この段落の先頭を分析する
続ける
code = [j.strip() for j in i.split('\n')[1:-1]]
F = comp(foo)
if(F[0] == 'error'):
return F
if(F[0]):
for i in code:
val = comp(i)
if(val[0] == 'error'):
return val
return ['']
return ['']
ここでの実行手順
は前のものに基づいており、理解するのは難しいことではありません
結論として
結論として:
######作者のヒットロード
さようなら、クラスから出るのは終わった!
ヒットロードは時々更新されます、見るか去ってください!