diff Bison-Flex/Compiler-StackBase/UTF8/vm.h @ 5:caede627f691

chage encoding
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 May 2011 12:45:07 +0900
parents 805d39d28230
children 86c0a38332fe
line wrap: on
line diff
--- a/Bison-Flex/Compiler-StackBase/UTF8/vm.h	Tue May 17 08:00:38 2011 +0900
+++ b/Bison-Flex/Compiler-StackBase/UTF8/vm.h	Tue May 17 12:45:07 2011 +0900
@@ -1,5 +1,5 @@
 //
-// CPU
+// 仮想CPU
 //
 //		(c)2008 Chihiro.SAKAMOTO HyperWorks
 //
@@ -11,9 +11,9 @@
 
 #ifdef	_MSC_VER
 //
-//	VS2008Ǥϡ奢饤֥ؿ*_sˤȤ褦ٹ𤬽Фޤ 
-//	Ǥϡ̲gccбˤΤᡢ饤֥ѤƤΤǡ
-//	ٹ޻ߤƤޤ
+//	VS2008では、セキュアライブラリ関数(*_s)を使うよう警告が出ます。 
+//	ここでは、一般化(gcc等の対応)のため、旧ライブラリを使用しているので、
+//	警告を抑止しています。
 //
 #pragma warning(disable: 4996)
 #endif
@@ -44,16 +44,16 @@
 		}
 
 	  public:
-		unsigned char *command_;	// ޥɥơ֥
-		char *text_buffer_;			// ƥȥǡ
-		int command_size_;			// ޥɥ
-		int text_size_;				// ƥȥ
-		int value_size_;			// Хѿ
-		int entry_point_;			// ϰ
+		unsigned char *command_;	// コマンドテーブル
+		char *text_buffer_;			// テキストデータ
+		int command_size_;			// コマンドサイズ
+		int text_size_;				// テキストサイズ
+		int value_size_;			// グローバル変数サイズ
+		int entry_point_;			// 開始位置
 	} ;
 
 
-	// 0㳰
+	// 0除算例外
 	class devide_by_zero: public std::exception {
 	  public:
 		const char *what() const throw()
@@ -62,11 +62,11 @@
 		}
 	} ;
 
-	// ۥޥ
+	// 仮想マシン
 	class vcpu {
 	  public:
-		const static int STACK_SIZE = 1000;			// å
-		const static int global_flag = 0x4000000;	// ѿե饰
+		const static int STACK_SIZE = 1000;			// スタックサイズ
+		const static int global_flag = 0x4000000;	// 外部変数フラグ
 		const static int global_mask = 0x3ffffff;
 
 	  public:
@@ -81,52 +81,52 @@
 		int run();
 
 	  private:
-		// Push
+		// 定数Push
 		void PushConst(int val)
 		{
 			push(val);
 		}
 
-		// ʸPush
+		// 文字定数Push
 		void PushString(int val)
 		{
 			push(std::string(text_buffer_ + val));
 		}
 
-		// ѿPush
+		// 変数Push
 		void PushValue(int val)
 		{
 			push(global_value[val]);
 		}
 
-		// ѿPush
+		// ローカル変数Push
 		void PushLocal(int val)
 		{
 			push(stack[val + stack_base]);
 		}
 
-		// 󤫤Push
+		// 配列からPush
 		void PushArray(int val)
 		{
 			int index = top().i_; pop();
 			push(global_value[val + index]);
 		}
 
-		// 󤫤Push
+		// ローカルの配列からPush
 		void PushLocalArray(int val)
 		{
 			int index = top().i_; pop();
 			push(stack[val + stack_base + index]);
 		}
 
-		// ѿ()Push
+		// ローカル変数(参照)Push
 		void PushLocalRef(int val)
 		{
 			int addr = stack[val + stack_base].i_;
 			push(ref_to_value(addr));
 		}
 
-		// ()Push
+		// ローカルの配列(参照)からPush
 		void PushLocalArrayRef(int val)
 		{
 			int addr = stack[val + stack_base].i_;
@@ -134,7 +134,7 @@
 			push(ref_to_value(addr + index));
 		}
 
-		// ɥ쥹Push
+		// アドレスをPush
 		void PushAddr(int val)
 		{
 			if ((val & global_flag) == 0)	// local
@@ -142,7 +142,7 @@
 			push(val);
 		}
 
-		// Υɥ쥹Push
+		// 配列のアドレスをPush
 		void PushArrayAddr(int val)
 		{
 			if ((val & global_flag) == 0)	// local
@@ -151,40 +151,40 @@
 			push(val + index);
 		}
 
-		// ѿPop
+		// 変数にPop
 		void PopValue(int val)
 		{
 			global_value[val] = top(); pop();
 		}
 
-		// ѿPop
+		// ローカル変数にPop
 		void PopLocal(int val)
 		{
 			stack[val + stack_base] = top(); pop();
 		}
 
-		// ѿPop
+		// 配列変数にPop
 		void PopArray(int val)
 		{
 			int index = top().i_; pop();
 			global_value[val + index] = top(); pop();
 		}
 
-		// ѿPop
+		// ローカルの配列変数にPop
 		void PopLocalArray(int val)
 		{
 			int index = top().i_; pop();
 			stack[val + stack_base + index] = top(); pop();
 		}
 
-		// ѿ()Pop
+		// ローカル変数(参照)にPop
 		void PopLocalRef(int val)
 		{
 			int addr = stack[val + stack_base].i_;
 			set_ref(addr, top()); pop();
 		}
 
-		// ѿ()Pop
+		// ローカルの配列変数(参照)にPop
 		void PopLocalArrayRef(int val)
 		{
 			int addr = stack[val + stack_base].i_;
@@ -192,19 +192,19 @@
 			set_ref(addr + index, top()); pop();
 		}
 
-		// ѿ
+		// ローカル変数を確保
 		void OpAllocStack(int val)
 		{
 			stack.resize(stack_base + val);
 		}
 
-		// PopʥåȥåפΤƤ
+		// 空Pop(スタックトップを捨てる)
 		void OpPop()
 		{
 			pop();
 		}
 
-		// ñޥʥ
+		// 単項マイナス
 		void OpNeg()
 		{
 			top().i_ = -top().i_;
@@ -350,7 +350,7 @@
 			push(lhs % rhs);
 		}
 
-		// ʸ==
+		// 文字列の==
 		void OpStrEq()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -359,7 +359,7 @@
 			push(lhs == rhs);
 		}
 
-		// ʸ!=
+		// 文字列の!=
 		void OpStrNe()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -368,7 +368,7 @@
 			push(lhs != rhs);
 		}
 
-		// ʸ>
+		// 文字列の>
 		void OpStrGt()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -377,7 +377,7 @@
 			push(lhs > rhs);
 		}
 
-		// ʸ>=
+		// 文字列の>=
 		void OpStrGe()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -386,7 +386,7 @@
 			push(lhs >= rhs);
 		}
 
-		// ʸ<
+		// 文字列の<
 		void OpStrLt()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -395,7 +395,7 @@
 			push(lhs < rhs);
 		}
 
-		// ʸ<=
+		// 文字列の<=
 		void OpStrLe()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -404,7 +404,7 @@
 			push(lhs <= rhs);
 		}
 
-		// ʸ+
+		// 文字列の+
 		void OpStrAdd()
 		{
 			const std::string &rhs = text(top()); pop();
@@ -413,13 +413,13 @@
 			push(lhs + rhs);
 		}
 
-		// ̵兩
+		// 無条件ジャンプ
 		void OpJmp(int val)
 		{
 			jmp(val);
 		}
 
-		// λ
+		// 真の時ジャンプ
 		void OpJmpC(int val)
 		{
 			int cond = top().i_; pop();
@@ -427,7 +427,7 @@
 				jmp(val);
 		}
 
-		// λ
+		// 偽の時ジャンプ
 		void OpJmpNC(int val)
 		{
 			int cond = top().i_; pop();
@@ -435,7 +435,7 @@
 				jmp(val);
 		}
 
-		// switchʸüȽ
+		// switch文用特殊判定
 		void OpTest(int val)
 		{
 			int value = top().i_; pop();
@@ -445,19 +445,19 @@
 			}
 		}
 
-		// ؿ
+		// 関数コール
 		void OpCall(int val)
 		{
 			push(stack_base);
-			push(addr());					// ꥿󥢥ɥ쥹Push
-			stack_base = stack.size();		// å١
+			push(addr());					// リターンアドレスをPush
+			stack_base = stack.size();		// スタックベース更新
 			jmp(val);
 		}
 
-		// ʤ꥿
+		// 引数なしリターン
 		void OpReturn()
 		{
-			stack.resize(stack_base);		// ѿӽ
+			stack.resize(stack_base);		// ローカル変数排除
 			int addr = top().i_; pop();
 			stack_base = top().i_; pop();
 			int arg_count = top().i_; pop();
@@ -465,11 +465,11 @@
 			jmp(addr);
 		}
 
-		// դ꥿
+		// 引数付きリターン
 		void OpReturnV()
 		{
 			vm::value result = top(); pop();
-			stack.resize(stack_base);		// ѿӽ
+			stack.resize(stack_base);		// ローカル変数排除
 			int addr = top().i_; pop();
 			stack_base = top().i_; pop();
 			int arg_count = top().i_; pop();
@@ -478,12 +478,12 @@
 			jmp(addr);
 		}
 
-		// CPUץ
+		// 仮想CPUプログラム停止
 		void OpHalt()
 		{
 		}
 
-		// ƥॳȤ߹ߴؿ
+		// システムコール(組み込み関数)
 		void OpSysCall(int val)
 		{
 			pop();	// arg_count
@@ -498,20 +498,20 @@
 			}
 		}
 
-		// ƥॳprint
+		// システムコール(print)
 		void sys_print()
 		{
 			std::cout << text(top());
 			pop();
 		}
 
-		// ƥॳ(ͤʸѴ)
+		// システムコール(数値を文字列に変換)
 		void sys_tostr()
 		{
 			int v = top().i_; pop();
 			char str[16];
 			sprintf(str, "%d", v);
-			push(std::string(str));			// ͤϥå
+			push(std::string(str));			// 戻り値はスタックに入れる
 		}
 
 	  private: