实际上我正在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.
但我不确定这是写得好还是工作。你能告诉我如何用我的编程语言解析标签(并编写跳转函数)吗?或者如果我的代码目前还不错,你能帮我改进一下吗?
答案 0 :(得分:0)
在我的解析器中使用行计数器我决定像在BASIC中看到的那样实现gotos。谢谢大家的帮助。