2017-05-25 67 views
3

其實我正在Lua中編寫一種編程語言。這很有趣。我寫了一些標準庫(stack op和簡單的io)。然後我想到了標籤。它看起來像組裝。 while和for循環在任何位都不好笑,所以用該語言編程可能會非常具有挑戰性。以下是這個系統的一些要求:將標籤添加到我的編程語言中

  • 標籤堆棧(或數組,字典)必須可以從全局上下文訪問。
  • 跳轉指令處理程序將在單獨的文件中。

這是我的標籤處理函數看看怎麼樣:

function handleLabel(name,currentLine) 
end 

我不知道如何實現這種魔力。首先我想過:

LabelLineIDS = {} 
Labels = {} 
Labelamount = 1; 


function handleLabel(name,currentLine) 
    LabelLineIDS[Labelamount]=currentline 
    Labels[Labelamount]=name 
    Labelamount=Labelamount+1 
end 

-- In file "jump.lua": 

local function has_value (tab, val) 
    for index, value in ipairs(tab) do 
     if value == val then 
      return index 
     end 
    end 

    print ("Error: Label not defined.") -- Bail out. 
    os.exit(1) 
end 

local function _onlabel() 
    local labelName = globalparams --Globalparams variable contain parameters to each function, at the moment 
            --this will contain label name. It _can_ be nil. 
    return LabelLineIDS[has_value(Labels, labelName)] 
end 
CurrLine = _onlabel() --Currline - current line that get's parsed. 
        --1 command per one line. 

但我不確定這是寫得好還是工作。你能告訴我如何解析我的編程語言中的標籤(並寫入跳轉函數)嗎?或者,如果我的代碼現在還可以,你能幫我改進嗎?

+3

解析是一回事。 _Interpreting_ labels/jumps - 非常不同的故事:) –

+0

@SergioTulentsev添加什麼標籤而不是'解析'? –

+0

這個應該更好 –

回答

0

在我的解析器中使用行計數器我決定實現gotos,就像我們可以在BASIC中看到的那樣。感謝大家的幫助。