Lua 令牌解析

lua-users home
wiki

Lua 的语法可以通过中断令牌解析器并修改输出进行更改。LHF 提供了一个实验性库 *ltokens*(“基于 Lua 词法分析器的 Lua 代码词法分析库”)[1]。以下页面包含此代码的一些使用案例,可能有助于开发该概念。这些问题可能有很多不同的解决方案,但需要一些使用案例来确保对实际应用的解决方案是可能的。

这里没有提供任何解决方案,因为整个令牌解析概念目前还处于非常实验性的阶段。如果您想为这些问题提供解决方案,请创建您自己的页面,并从这里链接。请随时将您自己的使用案例添加到此列表中。

枚举

枚举对于将值分组在一起很有用。枚举可以在 Lua 中通过以下方式非常有效地完成

local SHAPE_SQUARE, SHAPE_CIRCLE, SHAPE_STAR = 0, 1, 2  -- etc.

foo(SHAPE_STAR)  -- usage

问题

概念:Enum 关键字和仅在编译时存在的数值表。

enum ShapeType { SQUARE, CIRCLE, STAR, NUM_TYPES }

print(ShapeType.CIRCLE)  -- usage
备注

C 函数调用

C 函数可以注册到 Lua(int MyLuaFunc(lua_State*))。此注册涉及将函数指针和字符串函数名称传递给 Lua(它会复制字符串)。要调用函数,您需要使用函数字符串名称进行全局查找,并调用返回的对象。更具描述性的:[2].

问题

概念:在 Lua 编译时,可以将导出函数列表(类似于 C 中的链接库)传递给解析器。当我们拦截对命名函数的调用时,我们可以插入函数指针或函数枚举,以便在运行时调用函数。

备注

Switch 语句

可以说 Lua 不需要 SwitchStatement,但它可能是对 ltokens 的一个有趣的测试。例如(您可以随意更改语法)

switch (value) do
    case 1 do print('one') end
    case 2 do print('two') end
    default do print('default') end
end

Try-except 语句

Lua 支持异常处理,但其接口是函数式的,并且是低级别的,这使得它使用起来很麻烦。也许对令牌进行调整在这里会有所帮助。

类型检查

在调用 C 绑定或其他 Lua 函数时,通常对象必须是特定类型。Lua 不支持类型检查,但这在这些情况下将非常有用。例如,如果我们绑定一个 C 函数,

void foo(int arg1, const char* arg2);
然后我们从 Lua 中调用它,我们只会在运行时才知道调用参数类型是否错误。能够添加可选参数类型将很不错,这样如果识别出绑定函数,就可以检查其参数类型。

备注

另请参阅


最近更改 · 首选项
编辑 · 历史记录
最后编辑于 2009 年 3 月 14 日凌晨 12:53 GMT (差异)