VSM README
setting.json
内に以下の内容を含めてください。
"code-runner.executorMap": {
/*以下を追加*/
"vsm": "cd $dir && vsm $fileName"
}
/*中略*/
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "keyword.operator.vsm",
"settings": {
"foreground": "#41af62"
}
},
{
"scope": "keyword.control.vsm",
"settings": {
"foreground": "#fc6b6b"
}
},
{
"scope": "keyword.other.vsm",
"settings": {
"foreground": "#fce770"
}
},
{
"scope": "support.function.vsm",
"settings": {
"foreground": "#fc70e2"
}
},
{
"scope": "support.variable.vsm",
"settings": {
"foreground": "#a5ff50"
}
},
{
"scope": "entity.name.function.vsm",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": "entity.name.section.vsm",
"settings": {
"foreground": "#7d7d7d"
}
},
{
"scope": "storage.type.baal.vsm",
"settings": {
"foreground": "#af68cfb7",
"fontStyle": "bold underline"
}
},
{
"scope": "storage.type.vsm",
"settings": {
"foreground": "#d8d8d8"
}
},
{
"scope": "markup.bold.vsm",
"settings": {
"fontStyle": "bold"
}
}
]
}
Features
Example
ISP 2
LA 0 0
LC 2
SI
LA 0 1
GETI
SI
LC 10
LC 2
ADD
LC 1
SUB
LV 0 0
ADD
LV 0 1
MOD
PUTI
EXIT
Snippets
対応しているコード
コード | 対応 | コード | 対応 |
LC | ◯ | LA | ◯ |
LV | ◯ | LI | ◯ |
SV | ◯ | SI | ◯ |
DUP | ◯ | ISP | ◯ |
GETC | ◯ | GETI | ◯ |
PUTC | ◯ | PUTI | ◯ |
ADD | ◯ | SUB | ◯ |
MUL | ◯ | DIV | ◯ |
MOD | ◯ | INV | ◯ |
EQ | ◯ | NE | ◯ |
GT | ◯ | LT | ◯ |
GE | ◯ | LE | ◯ |
B | ◯ | BZ | ◯ |
SB | ◯ |
CALL | ◯ | RET | ◯ |
EXIT | ◯ |
VSMの基本的なコードパターンを大文字、小文字対応で実装済み。また、以下のようなスニペットを用意してある。
IF
[条件式]
BZ [相対アドレス]
[true時の処理]
IFELSE
[条件式]
BZ [Bへの相対アドレス]
[true時の処理]
B [false時の処理終わりへの相対アドレス]
[false時の処理]
WHILE
[条件式]
BZ [Bへの相対アドレス]
[true時の処理]
B [条件式への相対アドレス]
\n
単に10
を表す
PUTN
改行を出力する
LC 10
PUTC
PUTG
グローバル変数の数値を出力する
LV 0 [グローバル変数の番号]
PUTI
PUTL
ローカル変数の数値を出力する
LV 1 [ローカル変数の番号]
PUTI
SLV
変数の自己代入
LA [0|1] [変数の番号]
LV [0|1] [変数の番号]
SI
INCV
変数に1加える
LA [0|1] [変数の番号]
LV [0|1] [変数の番号]
LC 1
ADD
SI
DECV
変数から1減らす
LA [0|1] [変数の番号]
LV [0|1] [変数の番号]
LC 1
SUB
SI
GLOBAL
グローバル変数の値をセット
LA 0 [グローバル変数の番号]
SI
LOCAL
ローカル変数の値をセット
LA 1 [ローカル変数の番号]
SI
return(RETの場合はRETだけ)
メソッドの計算結果を返す
LA 1 0
SI
RET
METHOD
メソッドの定義
ISP (3+[引数の個数]+[ローカル変数領域の大きさ])
RET
CALLMETHOD
引数付きメソッドの呼び出し
ISP 3
[引数をスタック]
ISP -(3+[引数の個数])
CALL [実行したいメソッドの絶対アドレス]
MAIN
main関数
ISP [グローバル変数の個数]
LC [グローバル変数の個数]
SB 1
CALL [mainの絶対アドレス]
EXIT