Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 向我的编程语言添加标签_Lua_Interpreter - Fatal编程技术网

Lua 向我的编程语言添加标签

Lua 向我的编程语言添加标签,lua,interpreter,Lua,Interpreter,实际上,我正在用Lua编写一种编程语言。这很有趣。我已经编写了一些标准库(堆栈操作和简单io)。然后我想到了标签。它看起来像是在组装。While和for循环一点也不好笑,所以用这种语言编程可能会很有挑战性。以下是该系统的一些要求: 标签堆栈(或数组、字典)必须可从全局上下文访问 跳转指令处理程序将位于单独的文件中 这是我的标签处理函数的外观: function handleLabel(name,currentLine) end 我不知道如何实现这种魔法。首先我想到了: LabelLineI

实际上,我正在用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.

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

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

解析是一回事。解释标签/跳转-非常不同的故事:)@SergioTulentsev添加什么标签而不是“解析”?这一个应该更好如果你用Lua编写整个内容,你可以有一个标签表。表键是标签名,它们的值是指令表大小(假设您在解析时将所有指令放在一个表中)。跳转指令查看标签表并将解释器索引移动到存储的大小。我在这里说的是大小,因为存储的跳转索引基本上是解析器点击标签时指令表的大小。希望我正确理解了这个问题。我决定改变我的“制度”。无论如何,谢谢你。实施简单的p/l,两天就足够了。