関数の処理
OsoScriptはmain()関数から始まって、関数を呼びつつ処理が進むので、プログラム的には関数しかありません。そこで、関数内の処理について簡単に説明します。
昨日書いたように、関数内で使用する変数の確保が行われた後、開きカッコ'{'から閉じカッコ'}'までの間にあるプログラムを実行していきます。
while( !Amatch( "}", 0 ) ){ value = p_expression(); //構文解析開始 if( Amatch( "}", 0 ) ){ break; } if( Henatai[LocalHenStac[LocalHenStacPtr-1] ][0]=='1' ){ //returnが実行された。 break; } if( Henatai[ LocalHenStac[0] ][2]=='1' ){ //execコマンドが実行された。 break; } }
関数の処理は、構文解析を呼ぶループが'}'が来るまで回っているだけです。また、それとは別に、'return'命令が実行されたフラグと、exec命令が実行されたフラグを見ています。
return命令が実行された場合は、直ちに関数を抜けるので、ループをbreakしています。returnの戻り値はvalueに入っています。
execコマンドが実行された場合も、別のスクリプトを呼び出す必要があるので、ループを抜けます。
ループを抜けた後は、関数終了の後処理として、下記の処理をするだけです。
//関数を抜けてきたら、ローカル変数をデクリメント(戻す) LocalHenStacPtr--; Henpos = LocalHenStac[LocalHenStacPtr]; //実行位置のスタックをデクリメント(戻す) ScriptStacPtr--; TokenPos = ScriptReadPosStac[ScriptStacPtr]; return value;
以上が関数内の処理の様子です。
次は、構文解析を簡単に説明したいと思います。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム