我正在为一个非常简单的编程语言开发一个非常简单的解释器,而且我目前正试图在需要满足条件时提取一段代码来解释。目前要评估的代码位于关键字compare
和endcompare
之间,我想要发生的是以下内容:
endcompare
之后的所有内容,并将compare
保留在该列表中。compare
时进行评估,但不包括endcompare
。基本上:
original = {"a", "b", "c", "compare", "this", "please", "whatever", "endcompare", "d"}
在此之后"魔术"功能,产生以下内容:
new = {"a", "b", "c", "compare", "d"}
c = {"this", "please", "whatever"}
在这种情况下,我们会评估new
,当遇到关键字compare
时,请评估c
并返回new
。
到目前为止,我已经尝试了一些尝试,但没有一次尝试成功,除非你计算逆转部分表格或跳过其他所有令牌......
我将如何创建该表?
答案 0 :(得分:1)
我认为这会做你想要的,但我还没有测试过:
function produceTwo(original)
local newT, c, go = {}, {}, false
for i,v in ipairs(original) do
if v == "compare" then
go = true
continue
elseif v == "endcompare" then
go = false
continue
end
if go then
table.insert(c, v)
else
table.insert(newT, v)
end
end
return newT, c
end