2017-05-25 41 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中看到的那样。感谢大家的帮助。