有一個extended version of bf它有一個goto
指令,?
。Brainf中的GOTO指令***
我知道理論上應該可以在經典的bf指令版本中模擬goto。我如何在實踐中做到這一點?有沒有existing bf goto pattern or algorithm?有沒有辦法將goto ?
指令轉換爲bf版本而無需轉到?
指令?
有一個extended version of bf它有一個goto
指令,?
。Brainf中的GOTO指令***
我知道理論上應該可以在經典的bf指令版本中模擬goto。我如何在實踐中做到這一點?有沒有existing bf goto pattern or algorithm?有沒有辦法將goto ?
指令轉換爲bf版本而無需轉到?
指令?
其實它並不那麼複雜。你想的僞代碼是這樣的:
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但它是相當可行的。
我能想到的唯一方法就是通過使用brainfuck編寫的brainfuck解釋器來運行該程序(如dbfi)。通過一些修改,您可以添加新的說明,如LBL和GOTO。
唯一的問題是它會很慢。另一個問題是,你將不得不將實際的brainfuck程序存儲在內存磁帶上(最簡單的方法就是通過輸入程序,就像dbfi一樣)。對於一個更「乾淨」的做法,你將不得不製作一個brainfuck程序,將實際的程序放在內存磁帶上,以便解釋器可以讀取和運行它。
這當然不是一個非常優雅的方法,但我認爲它實際上可能工作得很好,儘管它肯定會很慢。
謝謝,BF的編譯器正是我想到的。不僅要實現goto,還要實現通用遞歸和指向函數的指針,我需要一個goto指令。 – vz0