Mercurial > hg > Members > nobuyasu > myCompiler
diff Bison-Flex/BasicCompiler-MemoryBase/vm.cpp @ 4:805d39d28230
add Compiler-stackbase
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 May 2011 08:00:38 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Bison-Flex/BasicCompiler-MemoryBase/vm.cpp Tue May 17 08:00:38 2011 +0900 @@ -0,0 +1,35 @@ +// +// 仮想CPU +// +// switch-caseでの実装例 +// +// (c)2007 Chihiro.SAKAMOTO HyperWorks +// +#include <exception> +#include "vm.h" + +// 実行 +int vm::vcpu::run() +{ + command_ = data_.command_; // プログラム格納位置 + command_size_ = data_.command_size_; // プログラムの大きさ + + global_value.resize(data_.value_size_); // 外部変数テーブル確保 + command_ptr_ = command_; // プログラムカウンター初期化 + + try { + while (*command_ptr_ != VM_HALT) { // Haltするまでループ + int op = *command_ptr_++; + switch (op) { + #define VM_SWITCHTABLE + #include "vm_code.h" + #undef VM_SWITCHTABLE + } ; + } + } + catch (const std::exception &e) { + std::cerr << "例外発生(" << e.what() << ")" << std::endl; + return -1; + } + return 0; +}