Skip to content

Instantly share code, notes, and snippets.

@okwrtdsh
Created May 31, 2018 14:48
Show Gist options
  • Save okwrtdsh/2e0ce698c0c2a50a7af110dd38f30a74 to your computer and use it in GitHub Desktop.
Save okwrtdsh/2e0ce698c0c2a50a7af110dd38f30a74 to your computer and use it in GitHub Desktop.

S: スタック

  1. S-S-(S|T)(S|T)+L: スタックに積む(S:正,T:負)(S:0,T:1)
  • S-TS-(S|T)+L: スタックの上からN番目の値を複製
  • S-TL-(S|T)+L: スタックの上から2番目以降をN個破棄
  • S-LS: a:b:[] -> a:a:b[]スタックの一番上の値を複製
  • S-LT: a:b:[] -> b:a:[]スタックの上の2つの値を交換
  • S-LL: a:b:[] -> b:[]スタックの一番上の値を破棄

TS: 数値演算

  1. TS-SS: a:b:[]->(b+a):[]
  • TS-ST: a:b:[]->(b-a):[]
  • TS-SL: a:b:[]->(b*a):[]
  • TS-TS: a:b:[]->(b/a):[]
  • TS-TT: a:b:[]->(b%a):[]

TT: ヒープ

  1. TT-S: a:b:[],{}->[],{b:a}
  • TT-T: a:[],{a:b}->b:[],{a:b}

TL: 入出力

  1. TL-SS: スタックから値を取り出し、文字を出力
  • TL-ST: スタックから値を取り出し、整数を文字列に変換し出力
  • TL-TS: スタックからアドレスを取り出し、入力から一文字読み取り、ヒープに文字コードを追加
  • TL-TT: スタックからアドレスを取り出し、入力から一行読み取り、ヒープに入力から一文字読み取り文字コードを追加

L: フロー制御

  1. L-SS-(S|T)+L: ラベルを定義
  • L-ST-(S|T)+L: 現在の位置をコールスタックに積んで、ラベルにジャンプ
  • L-SL-(S|T)+L: ラベルにジャンプ
  • L-TS-(S|T)+L: スタックから値を取り出し、0であればラベルにジャンプ、そうでなければ何もしない
  • L-TT-(S|T)+L: スタックから値を取り出し、負であればラベルにジャンプ、そうでなければ何もしない
  • L-TL: コールスタックの一番上に処理を戻す
  • L-LL: プログラムをその場で終了する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment