コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

関数の処理

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系のプログラム