2014-11-16 17 views

回答

1

有沒有簡單的方法可以做到這一點,我知道。這是將語言編譯爲Brainfuck的主要挑戰之一。

正如您所說,它理論上當然是可行的,但它需要您通過實現堆棧或堆或一些類似的數據結構,以非常自律的方式構造代碼。

項目C2BF是從C到Brainfuck的部分編譯器,完全是這樣做的。它通過解釋Brainfuck細胞進入的五種,即重複圖案模擬堆疊,

1)堆棧
2)堆
3)堆棧位置標記/頂部標記
4)走
5 )貫徹

如果你有興趣做這樣的事情的更具體的實施細則,你可能會感興趣的看着這說明對BrainFix,它描述了更充分怎麼辦簡單˚F低和內存控制。

+0

謝謝,BF的編譯器正是我想到的。不僅要實現goto,還要實現通用遞歸和指向函數的指針,我需要一個goto指令。 – vz0

0

其實它並不那麼複雜。你想的僞代碼是這樣的:

goflg := 1 
while goflg do begin 

    // repeat this for each section 
    if goflg <> 0 then begin 
    goflg := goflg - 1 
    end else begin 
    // run your code in here and at the end 
    // set goflg to get to the section you want next. 
    end 
    // to here 

    // repeat this for each section 
    if goflg <> 0 then begin 
    goflg := goflg - 1 
    end else begin 
    // run your code in here and at the end 
    // set goflg to get to the section you want next. 
    end 
    // to here 


end 

你必須添加一個標誌做ELSE部分,另一個,如果你想要做的IF部分without a copy但它是相當可行的。

0

我能想到的唯一方法就是通過使用brainfuck編寫的brainfuck解釋器來運行該程序(如dbfi)。通過一些修改,您可以添加新的說明,如LBL和GOTO。

唯一的問題是它會很慢。另一個問題是,你將不得不將實際的brainfuck程序存儲在內存磁帶上(最簡單的方法就是通過輸入程序,就像dbfi一樣)。對於一個更「乾淨」的做法,你將不得不製作一個brainfuck程序,將實際的程序放在內存磁帶上,以便解釋器可以讀取和運行它。

這當然不是一個非常優雅的方法,但我認爲它實際上可能工作得很好,儘管它肯定會很慢。