实际上,我是用Lua写一种编程语言。很好玩。我写了一些标准库(堆栈op和simple 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.
但是我不确定这是写得很好,甚至是可行的。您能告诉我如何用我的编程语言解析标签(并编写跳转功能)吗?或者,如果目前我的代码还不错,您可以帮助我进行改进吗?
请您参考如下方法:
我决定在解析器中使用行计数器,从而实现了在BASIC中可以看到的gotos。谢谢大家的帮助。




