les*_*rid 5 c# lua parsing dynamic
我有一堆Lua表形式的数据,我想将这些数据解析为C#中的可用结构.
Lua表的问题在于存在可选字段,表非常动态,并且不仅仅是一个字体,其中一个类型用于键,一个类型用于值.可以有一个包含字符串和整数键的Lua表,以及integer,string和even table 类型的值.
遗憾的是,我正在解析的数据利用了语言的动态特性,而且并没有真正以任何直接的方式构建.例如,这需要动态表示数据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 }
}
}
Run Code Online (Sandbox Code Playgroud)
有没有图书馆可以做到这一点?有没有办法在不逐字符解析数据的情况下实现这一目标?
您可以使用luainterface库
这里有一些示例代码。
您将需要使用DoFile(加载文件)和GetTable将表读入一个LuaTable对象的组合,您可以使用 c# 的结果。暴露LuaTable了一个IDictionaryEnumerator贯穿GetEnumerator。
编辑:
如果你有这个表构造函数:
local t = { os.time() }
print(t[1]);
Run Code Online (Sandbox Code Playgroud)
需要执行构造函数中的函数来初始化数据。
对于常量文字,您可以使用字符串常量,如下所示:
local a = [==[
hello
there""\"]==]
Run Code Online (Sandbox Code Playgroud)
具有不同级别的等号
数字文字可以具有以下形式:
0X1.921FB54442D18P+1
Run Code Online (Sandbox Code Playgroud)
以 P 作为二进制指数。
在不使用轻量级 lua VM 的情况下忠实地重现常量文字的 lua 语法将需要重新实现 lua 语言规范的大部分内容。重新发明轮子并没有多大好处。
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |