Skip to content
sonota88 edited this page Apr 20, 2025 · 22 revisions

記事

関連

VMの命令セット

TODO 各命令の説明

  • mov
  • add
  • mul
  • cmp
  • jmp
  • je
  • call
  • ret
  • push
  • pop
  • exit
  • set_vram
  • get_vram
  • _cmt
  • _debug

アセンブリ

VM命令とほぼ1対1対応

Mini Ruccola言語

Mini Ruccola言語という名前にする前は VG言語と呼んでいました。

予約語

call
call_set
case
func
return
set
var
when
while
_cmt
_debug

コメント

// から行末まで

var x; // ここはコメント

変数

  • 宣言
    • var 文
    • 関数定義の直下でのみ使える(たとえば while 文の中では使えない)
  • 代入
    • set 文
func main() {
  var x;      // 宣言
  set x = 42; // 代入
  return x;   // 参照
}

値の型

  • 値の型は符号あり整数のみ
    • B言語に近い?(要調査)
    • 真偽値として扱う場面では 0 は偽、それ以外は真

演算子

  • +, *, ==, !=
  • 優先順位
    • 左結合。ただし、( ) で囲むことで明示的に指定できる。
1 + 2 * 3 //=> 9
1 + (2 * 3) //=> 7

関数

  • 定義
  • 呼び出し
    • call 文
    • call_set 文
  • return
func foo() {
}

func add(a, b) {
  return a + b;
}

func main() {
  var x;
  call foo();             // 呼び出し
  call_set x = add(1, 2); // 呼び出して返り値を変数に代入
}

条件分岐

  • case 文
    • fall through なし
func main() {
  var x = 1;

  case
  when (x == 42) {
    // ...
  } when (1) { // else-equivalent
    // ...
  }
}

反復

  • while文
func main() {
  var i = 0;

  while (i < 10) {
    // ...
    i = i + 1;
  }
}