Malbolge20用低級アセンブリ言語

文法

low_program ::= PROGRAM_START_TO label (改行) flags
flags ::= flag (改行) flags | units
flag ::= FLAG [n/m] FLAG_name; (改行)
units ::= unit (改行) units | routines
unit ::= UNIT {(改行) low_statements}
routines ::= routine (改行) routines | ε
routine ::= ROUTINE label {(改行) low_statements}
low_statements ::= low_statement(改行) low_statements | ε
low_statement ::= label:num |  ROT label |  REV ROT |  OPR label |  REV OPR |  SKIP label |  JMP label | REV JMP |  OUTPUT |  REV OUTPUT |  INPUT |  REV INPUT |  DUP |  IF FLAG_name (改行) BRANCH label |  NEXT FLAG_name 
※"num"は3進数20桁の値で最後にtをつける(例:01201201200120120120t). "label", "FLAG_name"は英文字から始まる任意の文字列.

サンプルプログラム

Hello.mc

Hello_output-routine.mc

unit.mc

0Branch.mc


詳細

入力となる低級アセンブリプログラムの全体像は以下の通り.

------------------------------
 エントリーラベル宣言

 フラグ宣言

 ユニット{
 ...
 }
 ルーチン1{
 ...
 }
 ルーチン2{
 ...
 }
 ...
------------------------------

コメントアウトには「#」を使う.「#」以降は改行されるまでコメントとなり,無視される.

  • エントリーラベルの宣言
  • フラグの宣言
  • ユニットの記述
  • 各ルーチンの記述
  • 固定ルーチン
  • 戻る