Skip to content
sonota88 edited this page Oct 1, 2022 · 18 revisions

記事

VMの命令セット

TODO 各命令の説明

  • exit
  • cp
  • add_ab
  • mult_ab
  • add_sp
  • compare
  • jump
  • jump_eq
  • call
  • ret
  • push
  • pop
  • 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 文
    • 関数定義の直下でのみ使える(たとえば while 文の中では使えない)
  • 代入
    • set 文
func main() {
  var x;      // 宣言
  set x = 42; // 代入
  return x;   // 参照
}

値の型

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

演算子

  • +, *, ==, !=
  • 優先順位なし(( ) で明示する)

関数

  • 定義
  • 呼び出し
    • 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 なし
    • 条件式をつねに truethy になる式にすれば else 節相当になる
func main() {
  var x = 1;

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

反復

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

  while (i < 10) {
    // ...
    i = i + 1;
  }
}
Clone this wiki locally