为我的编程语言添加标签
Adding labels to my programming language
实际上我正在用 Lua 编写编程语言。这很有趣。我写了一些标准库(stack 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 中看到的那样实现 goto。谢谢大家的帮助。
实际上我正在用 Lua 编写编程语言。这很有趣。我写了一些标准库(stack 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 中看到的那样实现 goto。谢谢大家的帮助。