给我的编程语言加上标签

实际上,我正在使用 Lua 编写一种编程语言。这很有趣。我已经写了一些标准库(栈操作和简单的 I/O),然后我考虑了标签。它看起来像汇编语言。而 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

-- 在文件“jump.lua”中:

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

    print ("Error: Label not defined.") -- 退出。
    os.exit(1)
end

local function _onlabel()
    local labelName = globalparams -- Globalparams 变量包含每个函数的参数,目前
                                   -- 这将包含标签名称。它可以为空。
    return LabelLineIDS[has_value(Labels, labelName)]
end
CurrLine = _onlabel() --Currline - 当前正在解析的行。
                     --每一行有一个命令。

但我不确定这是否写得好或者是否能正常工作。你能给我一些关于如何解析我的编程语言中的标签(并编写跳转函数)的想法吗?或者如果我目前的代码很好,你可以帮我改进它吗?

点赞
用户6889435
用户6889435

使用行计数器在我的解析器中,我决定像BASIC中一样实现goto。感谢大家的帮助。

2017-05-28 14:10:01