为我的编程语言添加标签

时间:2017-05-25 14:31:47

标签: lua interpreter

实际上我正在Lua中编写一种编程语言。这很有趣。我写了一些标准库(堆栈操作和简单的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.

但我不确定这是写得好还是工作。你能告诉我如何用我的编程语言解析标签(并编写跳转函数)吗?或者如果我的代码目前还不错,你能帮我改进一下吗?

1 个答案:

答案 0 :(得分:0)

在我的解析器中使用行计数器我决定像在BASIC中看到的那样实现gotos。谢谢大家的帮助。