JavaScriptやActionScriptなど、ECMAScript系のスクリプトには、evalという、引数の文字列をスクリプトとして実行するメソッドがあります。・・・あるはずなんですが、ActionScriptではevalはマトモに動きません。
というわけで、この辺でも書いた、ActionScript上で動作するスクリプトエンジンを作りました。やっと完成した・・・。時間かかった・・・。
動作サンプルはこれです。基本的に文法はECMA-262 3rd Editionにのっとってます。ActionScript1的な感じ。
独自拡張として、スクリプト中に
suspend;
と書くと、一旦Flash側に制御が戻るようになっています。そして、Flash側が再びスクリプトを実行したときに、中断したポイントから再開されます。(マイクロスレッド)
上のサンプルでは、Flash側に
this.onEnterFrame = funciton () {
virtualMachine.execute();
}
と書いているので(少し略してますが)、スクリプトを
loop {
trace('Hello');
suspend;
}
と書けば(loopは無限ループ構文)、毎フレームHelloが出力されることになります。
とりあえず、体が休息を求めているので詳しいことはまた今度書きます。それまで上のサンプルを弄って待っててください(笑
出来たばっかりでごちゃごちゃしてますけどコードも置いておきますので興味ある人はどうぞ。
// コード
var code:String = [
"loop {",
" trace('Hello');",
" suspend;",
"}"
].join("\n");
// コンパイル
var parser:IParser = new Parser(new Scanner(code));
var vm:VirtualMachine = new VirtualMachine();
vm.setByteCode(parser.parse());
// trace関数のエクスポート
vm.getGlobal().trace = trace;
// 実行
this.onEnterFrame = function () {
vm.execute();
}
みたいな感じで実行できます。
サイト内関連記事
この記事へのトラックバック
payday loan toronto payday loan in toronto
Here <a href=http://groups.google.com/group/dale6781/web/100-loan-online-payday>100 loan online payday</a> <a href=http://groups.google.com/group/dale6781/web/fast-loan-online-payday>fast loan online ...
loan until payday
For example <a href=http://groups.google.at/group/birnbaum1428/web/klingeltne-fr-das-handy>klingeltne fr das handy</a> <a href=http://groups.google.at/group/birnbaum1428/web/klingeltne-fr-samsung>klin...
TrackBack URL:
http://www.be-interactive.org/trackback.php?id=7

コメントはありません。