c# - 如何最好地解析任何常量 Lua 表而不将其加载到 Lua VM 中?

标签 c# parsing dynamic lua

我有一堆 Lua 表形式的数据,我想将这些数据解析为 C# 中可用的结构。

Lua 表的问题在于存在可选字段,表是非常动态的,而不仅仅是一个键为一种类型、值为一种类型的字典。可以有一个 Lua 表同时包含字符串和整数键,以及整数、字符串类型的值和甚至表。

遗憾的是,我正在解析的数据利用了语言的动态特性,并不是以任何直接的方式真正构建的。这需要数据的动态表示,例如使用 Dictionary<object, dynamic>

数据的格式是例如(来自 http://ideone.com/9nzXvt )

local mainNode =
{
    [0] = 
        {
            Name = "First element",
            Comments = "I have comments!",
            Data = { {123, 456}; foo = { "bar" } }
        },
    [1337] =
        {
            Name = "Another element",
            Data = { {0}; foo = nil }
        }
}

是否有任何图书馆可以做到这一点?有什么方法可以在不逐字符解析数据的情况下实现这一点?

最佳答案

您可以使用 luainterface图书馆

有一些 sample code here .

您需要结合使用 DoFile(加载文件)和 GetTable 将表读入 LuaTable您可以使用来自 C# 的结果的对象。 LuaTable 通过 GetEnumerator 公开了一个 IDictionaryEnumerator

编辑:

如果你有这个表构造器:

local t = { os.time() }
print(t[1]);

需要执行构造函数中的函数来初始化数据。

对于常量字面值,你可以有这样的字符串常量:

local a = [==[
  hello
  there""\"]==]

具有不同级别的等号

一个数字文字可以有以下形式:

0X1.921FB54442D18P+1

以 P 作为二进制指数。

在不使用轻量级 lua VM 的情况下忠实地再现常量文字的 lua 语法将需要重新实现 lua 语言规范的大部分内容。重新发明轮子并没有多大好处。

关于c# - 如何最好地解析任何常量 Lua 表而不将其加载到 Lua VM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220110/

相关文章:

c# - .Net Garbage Collector - 查看在运行时提升到 Gen2 的内容

c# - SQL 在单个查询中更新多行

c# - System.Net.Mail - 尝试将带有附件的邮件发送到 gmail,但仅适用于小附件

c# - 如何在自己的方法中模仿string.Format()?

c++ - 如何使用 std::istringstream 获取正确的缓冲区大小以进行数据解析

python - 读取 CSV 文件时出现 UnicodeDecodeError

c# - 如何在(字符串、标志列表、带标志的枚举)之间转换枚举?

C#动态类属性问题

javascript - 如何在jsp中使用javascript动态添加文本框

dynamic - 有没有办法捕获未知的结构字段?