hs2bf - はじめてのぶれいんふぁっく
今回は初めてhs2bfでコンパイルが通るようになった(注:バグあり)ので現状の説明と合わせて報告します。
まずは
結果から見てみましょう。
main=Halt
をコンパイルすると
>>[-]>+<<++++>>>+>>>+>>>+<<<<<[-]+[<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<]>>>>> >>>[-]<<<<<<<<<<<[->>>>>>>>>>>+<<<<<<<<<<<]>>>[>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<< +>>>]<<<<<<<<<<<]>>>>>>>>-[>>>[-]>>>[-]<<<<<<<<<<<<<[->>>>>>>>>>+<<<<<<<<<<]>>>> >>>>>>[-<<<<<<<<<<+>>>>>>>>>>>>>+<<<][-]>>>[-<<<<<<<<<<<<[->>>+<<<]>>>[->>>+<<<] >>>[->>>+<<<]>>>>>>[->>>+<<<]>>>][-]<<<<<<][-][-]>>>[-]<<<<<<<[->>>>>>>+<<<<<<<] >>>>>>>[-<<<<<<<+>>>>+>>>]<<<<<<<<<[-]>>>>>>-[<<<<<<[-]>>>>>>--[<<<<<<[-]+>>>>>> ]<<<<<<[>>>>>[->>>>+<<<<]>>>>>>>[-]<<<[-<<<<+>>>>>>>+<<<]<<<<<<<<<[-]>>>>>>>>>>> >--[<<<<<<<<<<<<[-]+>>>>>>>>>>>>]<<<<<<<<<<<<[>>>[-]<<<[-]]>>>>>>>>>>>>[-]<<<<<< <<<<<<[-]][-]+>>>>>>]<<<<<<[>>>>>[->>>>+<<<<]>>>>[-<<<<+<<+>>>>>>]<<<<<<<<<[-]]> >>>>>[-]>>>[-]<<<[-]>>>[-]<<<<<<[->>>+>>>+<<<<<<]>>>[-<<<+>>>][-]<<<<<<[-]>>>>>> >>>[<<<<<<<<<[-]>>>>>>>>>-[<<<<<<<<<[-]>>>>>>>>>-[<<<<<<<<<[-]>>>>>>>>>-[<<<<<<< <<[-]+>>>>>>>>>]<<<<<<<<<[<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<< <<<<]>>>>>>>>[-]>>>>>>[-]<<<<<<<<<<<<<[[->>>>>>>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>> >>>>>>>+<<<<<<]>>>>>>[-<<<<<<<<<<<<[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+ <<<]>>>[->>>+<<<]>>>]<<<<<<<<<<<<<]<<<[->>>>>>>>>>>>>>>>+<<<<<<+<<<<<<<<<<]>>>>> >>>>>>>>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>][-]<<<<<<+>>[-]<<[->>+<<][-]<<<<< <<++++>>>[-]>>>[-]+>>>>>>[-]<<<<<<<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+> >>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>> ]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<[-<<<+>>>]>>[-]][-]+>>>>>>>>>]<<<<<< <<<[<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[ ->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>>>>>>>[-]<<<<<<<<<<<<<<[->>>>>>+>>>>>>>>+<<< <<<<<<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>][-]<<<<<<<<[>>[-<<<+>> >]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>>>>>>[- >>>+<<<]<<<<<<<<]>>>>>>>>[-]<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>+>>>>>>>>+<<<<<<<< <<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>][-] <<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<]>>>>>>>>[-]>>>> >>[-]<<<<<<<<<<<<<[[->>>>>>>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>>>>>>>+<<<<<<]>>>>> >[-<<<<<<<<<<<<[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>> ]<<<<<<<<<<<<<]<<<[->>>>>>>>>>>>>>>>+<<<<<<+<<<<<<<<<<]>>>>>>>>>>>>>>>>[-<<<<<<< <<<<<<<<<+>>>>>>>>>>>>>>>>][-]<<<<<<+>>>>>>>>[-]<<<<<<<<[->>>>>>>>+<<<<<<<<][-]< <<<<<<++++++>>>[-]+++>>>[-]+>>>>>>>>>>>>[-]<<<<<<<<<<<[-]<<<<<<<<[>>[-<<<+>>>]>> >[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>> >[->>>+<<<]>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+ >>>]<<<<<<<<<<<<<<[->>>>>>>>+<<<<<<<<][>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]>>> [-<<<+>>>]<<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-]>>>[-]<<<<<<<<<<<<<<<<[[->>>>>>>>>>>>> +<<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>+<<<]>>>[-<<<<<<<<<< <<<<<[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<] >>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>[-]>>>[-]<<<<<<<<<[-<<<<<<<<<<<<<<<<+>>>>>>>>> >>>>>>>]<<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<<<<< <<][>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>>]>>>[ -<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<<<<<<<[->>>>>>>>+<<<<<<<<][>>[-<<<+>> >]>>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-]>>>[-]< <<<<<<<<<<<<<<<[[->>>>>>>>>>>>>+<<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>> >>>>>>>>>>>+<<<]>>>[-<<<<<<<<<<<<<<<[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>> +<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>[-]>>>[-]<<<<<< <<<[-<<<<<<<<<<<<<+>>>>>>>>>>>>>][-]<<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<< <+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>[-<<<+ >>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<[-<<<<<<<<<+>>>>>>>>>]<<<[-]<<<[- ]>>>>>>>>[-]][-]+>>>>>>>>>]<<<<<<<<<[<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>> ]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>>>>>>>[-]<< <<<<<<<<<<<<[->>>>>>+>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>> >>>>>>>>>>][-]<<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<]> >>>>>>>[-]>>>>>>[-]<<<<<<<<<<<<<[[->>>>>>>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>>>>>> >+<<<<<<]>>>>>>[-<<<<<<<<<<<<[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>> >[->>>+<<<]>>>]<<<<<<<<<<<<<]<<<[->>>>>>>>>>>>>>>>+<<<<<<+<<<<<<<<<<]>>>>>>>>>>> >>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>][-]<<<<<<+>>>>>[-]<<<<<[->>>>>+<<<<<][- ]<<<<<<<+++++>>>[-]+++>>>[-]>>>>>>>>>[-]<<<<<<<<[-]<<<<<<<<[>>[-<<<+>>>]>>>[-<<< +>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>>[->>>+<<<]>>>[->>> +<<<]>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]<< <<<<<<<<<<<<[->>>>>>>>+<<<<<<<<][>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+>>>]>>>[-<<<+ >>>]<<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-]>>>[-]<<<<<<<<<<<<<<<<[[->>>>>>>>>>>>>+<<<<< <<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>+<<<]>>>[-<<<<<<<<<<<<<<<[ ->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>]<< <<<<<<<<<<<<<<]>>>>>>>>>>>>>[-]>>>[-]<<<<<<<<<[-<<<<<<<<<<<<<+>>>>>>>>>>>>>][-]< <<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<]>>> [->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<< <<<<<<<<<<[-<<<<<<+>>>>>>]<<<[-]>>>>>[-]][-]+>>>>>>>>>]<<<<<<<<<[<<[>>[-<<<+>>>] >>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<]>>>>>>>>[-]>>>>>>[-]<<<<<<<<<<<<<[[- >>>>>>>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>>>>>>>+<<<<<<]>>>>>>[-<<<<<<<<<<<<[->>>+ <<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>[->>>+<<<]>>>]<<<<<<<<<<<<<]<<<[-> >>>>>>>>>>>>>>>+<<<<<<+<<<<<<<<<<]>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>> >>>>>][-]<<<<<<+>>[-]<<[->>+<<][-]<<<<<<<++++>>>[-]+++>>>[-]++>>>>>>[-]<<<<<[-][ -]<<<<<<<<[>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]<<<<<<<<<<<<<<][>>[->>>+<<<] >>>[->>>+<<<]>>>>>>[->>>+<<<]<<<<<<<<]>>[-<<<+>>>]>>>[-<<<+>>>]>>>>>>[-<<<+>>>]< <<<<<<<<<<<<<[-<<<+>>>]>>[-]]>>>>>>>>>[-]<<<<<<][-]<<<[-]<<
になります(5979文字)。
しかし
残念なことにアドレス94の命令でメモリの負領域にアクセスしてしまいます。
が、それがどの部分に対応するのかさっぱり分かりません。
ちなみに今のソースコードの状況は
- Main.hs(151行): CUI
- Front.hs(496行): Haskell -> Core
- Core.hs(193行) Core->GM
- GMachine.hs(409行): GM->SAM と GMのインタプリタ
- SAM.hs(419行): SAM->BF
- SCGR.hs(46行): 空。もしかするとここに中間言語を追加するかもしれない。
- Brainfuck.hs(105行): BFのインタプリタ
- Util.hs(145行): 雑多な定義群
合計1964行 (Front以外のフェーズはこのプログラムが通る最低限の実装)
なのでとりあえずSAMのインタプリタを実装してみて
- エラーが出る: GM->SAM
- 出ない: SAM->BF
の切り分けをしてみようと思います。SAMは簡単な言語なのでインタプリタは数時間で実装できるかと思います。