如何自动创建Lua表

时间:2016-03-22 01:43:12

标签: arrays lua lua-table

我正在为一个非常简单的编程语言开发一个非常简单的解释器,而且我目前正试图在需要满足条件时提取一段代码来解释。目前要评估的代码位于关键字compareendcompare之间,我想要发生的是以下内容:

  • 从原始令牌列表中移除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

到目前为止,我已经尝试了一些尝试,但没有一次尝试成功,除非你计算逆转部分表格或跳过其他所有令牌......

我将如何创建该表?

1 个答案:

答案 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