序文
私はプログラミング言語を実行しました:mylang
開始
それでも同じですが、mylangのコードを見てください。
def parse_for(block):
global status
try:
s = block.split('\n')[0]
init,foo,expression = s[4:-2].split(';')
except:
return ['error','ForSentenceError:too many expressions']
val = comp(init)
if(val[0] == 'error'):
return val
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 ['']
if(status == MYL_CONTINUE_STATUS):
status = MYL_NONE_STATUS
break
val = comp(expression)
if(val[0] == 'error'):
return val
return ['']
パラメータ
block
:コードセグメント
最初の行
global status
status
これはグローバル変数であり、次の3つの状態があります。
MYL_NONE_STATUS = 0
MYL_BREAK_STATUS = 1
MYL_CONTINUE_STATUS = 2
status = MYL_NONE_STATUS
前記
MYL_NONE_STATUS
発見されていない表すbreak
か、continue
MYL_BREAK_STATUS
を表し見出さbreak
MYL_CONTINUE_STATUS
発現見つかったcontinue
status
最初MYL_NONE_STATUS
、即ち、発見されていないbreak
、またはcontinue
後で
try:
s = block.split('\n')[0]
init,foo,expression = s[4:-2].split(';')
except:
return ['error','ForSentenceError:too many expressions']
ここで最初にfor
構文を理解するには:
for(<init>;<foo>;<expression>){
<code>
}
s
最初の行です:
for(<init>;<foo>;<expression>){
s[4:-2]
つまり<init>;<foo>;<expression>
に分割するために<init>
、<foo>
そして<expression>
最終的に展開し
、それをエラーが発生した場合、それは、開梱時にのために、より以下の3式のよりがあることを意味している。
その後、エラーが報告されます。ForSentenceError:too many expressions
続ける
val = comp(init)
if(val[0] == 'error'):
return val
<init>
式を実行する
後ろに
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 ['']
if(status == MYL_CONTINUE_STATUS):
status = MYL_NONE_STATUS
break
val = comp(expression)
if(val[0] == 'error'):
return val
return ['']
それを分解する
最初の部分
F = comp(foo)
if(F[0] == 'error'):
return F
if(not F[0]):
break
条件式を確認し<foo>
、エラーまたは値がfalseの場合は、終了します。
第二部
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 ['']
if(status == MYL_CONTINUE_STATUS):
status = MYL_NONE_STATUS
break
i = i.strip()
val = comp(i)
ここで手術<code>
部分のi番目の行に
if(val[0] == 'error'):
return val
行iにエラーがある場合は、終了します
if(status == MYL_BREAK_STATUS):
status = MYL_NONE_STATUS
return ['']
if(status == MYL_CONTINUE_STATUS):
status = MYL_NONE_STATUS
break
はいの場合break
、終了し
ますはいの場合continue
、このプログラムループの実行を中止しますが、終了しないでください
第三部
val = comp(expression)
if(val[0] == 'error'):
return val
実行<expression>
エラーが発生した場合は終了します
やっと
return ['']
終わり
結論として
著者
ヒットロード
さようなら、クラスから出るのは終わった!
ヒットロードは時々更新されます、見るか去ってください!