Commit 1b8ff1d9 authored by Genki Sakanashi's avatar Genki Sakanashi
Browse files

Update README.ja.md

parent 7e49b85b
Loading
Loading
Loading
Loading
+34 −22
Original line number Diff line number Diff line
# Malbolge20/ternary
制御付き疑似命令列(中間言語)からMalbolge20用の低級アセンブリ言語へのコンパイラ
SimpleConverterがスパゲッティコードになっていたので一から作成し直したもの.
- 制御付き疑似命令列からMalbolge20用の低級アセンブリ言語へのコンパイラ
- SimpleConverterを再設計して機能を追加

### SimpleConverterからの変更点
- 配列の導入[文献[1]](#参考文献)
- 関数の導入[文献[2]](#参考文献)
### SimpleConverterに追加した機能
- 配列([文献[1]](#参考文献)
- 関数([文献[2]](#参考文献)

# Getting Started
### 必要パッケージ
- [flex](https://github.com/westes/flex)
- [Bison](https://www.gnu.org/software/bison/manual/)

flex/Bison の代わりに Lex/Yacc を利用する場合は Makefile を書き換える.(ただし未検証)

### コンパイル方法
```bash
@@ -24,17 +23,33 @@ make
```

#### オプション
- `-m`, `-d`  
  `ROT`/`OPR`命令はモジュールという処理ブロックとして変換されるが,モジュールが連続する場合に,**モジュールからメインの処理フローに一旦戻ってから次のモジュールにジャンプする**`-m`)か,**直接次のモジュールにジャンプする**`-d`)かを切り替える.
    どちらのオプションも指定しなかった場合はランダムに決定される.  
- `-m` / `-d`  
  連続する`ROT``OPR`モジュールを呼び出すスタイルを指定する.
  - `-m`:メインの制御フローに戻ってから次のモジュールを呼び出す
  - `-d`:直接次のモジュールを呼び出す  
  どちらのオプションも指定されなかった場合はランダムに決定される.  
  モジュールの詳細については,文献[1] に記載.  

- `-c`, `-i`  
  `ROT`/`OPR`命令に加えて,`OUTPUT`/`INPUT`/`SET`/`RESET` 命令についても,**モジュールとして扱う**`-c`)か,**メインの処理フローに直接埋め込む**`-i`)かを切り替える.
    どちらのオプションも指定しなかった場合はランダムに決定される.  
- `-s`  
- `-c` / `-i`  
  `OUTPUT``INPUT``SET``RESET` 命令の変換スタイルを指定する.
  - `-c`:これらの命令についてもモジュールを生成する
  - `-i`:モジュールを生成せず,メインの制御フローに展開する  
  どちらのオプションも指定されなかった場合はランダムに決定される.  

- `-s <integer>`  
  ランダムに決定される場合の乱数のシードを与える

# 参考文献
1. 河邉翔平,酒井正彦,西田直樹,関 浩之,  
   難読性の高いMalbolgeコードを生成するコンパイラのための中間言語,  
   電子情報通信学会技術報告, Vol.116, No.127, pp.105-110 (2016).  
   [full document (copyright(C)2016 IEICE)](https://www.trs.css.i.nagoya-u.ac.jp/Malbolge/papers/IEICE-Tech-Rep-2016Jul-Malbolge.pdf)  

1. 坂梨元軌, 河邉翔平, 酒井正彦, 西田直樹, 橋本健二,  
   再帰呼び出しを持つC言語サブセットからMalbolgeへのコンパイラ,  
   電子情報通信学会技術報告, Vol.117, No.136, pp.145-150 (2017).  
   [full document (copyright(C)2017 IEICE)](https://www.trs.css.i.nagoya-u.ac.jp/Malbolge/papers/IEICE-Tech-Rep-2017Jul-Malbolge.pdf)

# コンパイル例
## 例1
  以下の制御付き疑似命令列をオプションを付けてコンパイルした結果を示す.
@@ -45,7 +60,7 @@ make
  END
  ```  

##### `-i` オプションでコンパイル
##### `-i` オプションでコンパイルした低級アセンブリコード
  ```
  PROGRAM_START_TO ENTRY@MAIN
  FLAG 0/2, FLAG_CASE0
@@ -72,7 +87,7 @@ make
  }
  ```

##### `-mc` オプションでコンパイル
##### `-mc` オプションでコンパイルした低級アセンブリコード
  ```
  PROGRAM_START_TO ENTRY@MAIN
  FLAG 1/2, FLAG0
@@ -119,7 +134,7 @@ make
    NEXT FLAG1
  }
  ```
##### `-dc` オプションでコンパイル
##### `-dc` オプションでコンパイルした低級アセンブリコード
  ```
  PROGRAM_START_TO ENTRY@MAIN
  FLAG 1/2, FLAG0
@@ -173,7 +188,7 @@ make
  END
  ```

##### `-d` オプションでコンパイル
##### `-d` オプションでコンパイルした低級アセンブリコード
  ```
  PROGRAM_START_TO ENTRY@MAIN
  FLAG 1/2, FLAG0
@@ -224,7 +239,7 @@ make
    END
  }
  ```
##### `-m` オプションでコンパイル
##### `-m` オプションでコンパイルした低級アセンブリコード
  ```
  PROGRAM_START_TO ENTRY@MAIN
  FLAG 1/2, FLAG0
@@ -279,6 +294,3 @@ make
    END
  }
  ```
# 参考文献
1. 河邉翔平,酒井正彦,西田直樹,関 浩之,[難読性の高いMalbolgeコードを生成するコンパイラのための中間言語 (2016).](https://www.trs.css.i.nagoya-u.ac.jp/Malbolge/papers/IEICE-Tech-Rep-2016Jul-Malbolge.pdf) 電子情報通信学会技術報告, Vol.116, No.127, pp.105-110
1. 坂梨元軌, 河邉翔平, 酒井正彦, 西田直樹, 橋本健二,[再帰呼び出しを持つC言語サブセットからMalbolgeへのコンパイラ (2017).](https://www.trs.css.i.nagoya-u.ac.jp/Malbolge/papers/IEICE-Tech-Rep-2017Jul-Malbolge.pdf) 電子情報通信学会技術報告, Vol.117, No.136, pp.145-150