function get_tokens(str)
local string = string
local table = table
local tokens = {}
local stringbuffer = ""
local numberbuffer = ""
local previous_is_number = false
local previous_is_string = false
local previous_is_quote = false
local has_process = false
local is_X16mode = false
for i = 1, #str do
local char = string.sub(str, i, i)
has_process = false
if previous_is_number == false and (string.find(char, "%a") or string.find(char, "_")
or (string.find(char, "%d") and previous_is_string) )
then
stringbuffer = string.format("%s%s", stringbuffer, char)
previous_is_string = true
has_process = true
end
if not (previous_is_number and char == ".") and (has_process == false and string.find(char, "%p")) then
if stringbuffer ~= "" then
table.insert(tokens, stringbuffer)
stringbuffer = ""
previous_is_string = false
end
if numberbuffer ~= "" then
table.insert(tokens, numberbuffer)
numberbuffer = ""
previous_is_number = false
is_X16mode = false
end
table.insert(tokens, char)
previous_is_quote = true
has_process = true
end
if has_process == false and ((string.find(char, "%d") or (numberbuffer ~= "" and string.find(char, "%.")))
or (is_X16mode and string.find(char, "%x")) ) then
if (previous_is_number == false) then
local nextchar = string.sub(str, i+1, i+1)
if nextchar and (nextchar == "x" or nextchar == "X") then
is_X16mode = true
i = i+1
char = char .. nextchar
end
end
numberbuffer = string.format("%s%s", numberbuffer, char)
previous_is_number = true
has_process = true
end
end
print_table(tokens)
return tokens
end
--local str = [[dequeOf.use("1155.321"). STRINGI.push_back(CComVariant("{"));]]
--local str = [[if ((vtVal.vt != VT_I4) || (0x0000FFFF<(DWORD)vtVal.lVal))]]
--local str = [[333, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D};]]
--get_tokens(str)
分享到:
- 2009-09-25 10:15
- 浏览 1325
- 评论(0)
- 论坛回复 / 浏览 (0 / 1625)
- 查看更多
相关推荐
6. **运行Lua代码**:使用`luaL_dostring`或`luaL_dofile`执行Lua脚本中的代码,这将调用之前注册的C++函数。 7. **内存管理**:C++函数中可能需要分配或释放内存,需要注意与Lua的垃圾回收机制协调。例如,使用`...
这主要通过 Lua 的 C API 实现,它提供了一套 C 函数供外部语言(如 C++)调用,同时也允许外部代码注册函数给 Lua 使用。在 C++ 中,我们可以创建一个 Lua 共享库,其中包含用于与 Lua 交互的函数。 1. **创建 Lua...
关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,Main.cpp ,build_pgk.bat 1.启动CodeBlocks...
LuaExample中的示例可能包含一个简单的C++程序,该程序加载一个Lua脚本,定义一个C++函数,然后在Lua中调用这个函数。同时,Lua脚本也可能调用C++注册的函数,完成数据交互。 四、注意事项 1. 错误处理:在C++调用...
这可能是一个包含Lua脚本的文件,其中包含了调用C++函数的代码。在Lua中,调用C++函数通常需要通过全局环境中的一个表(table)来完成,这个表是C++导出给Lua的接口。例如,你可能会看到类似以下的Lua代码: ```lua...
要从C++中调用Lua函数,首先需要使用`lua_getglobal()`获取全局函数引用,然后通过`lua_pcall()`执行该函数。假设`move`函数在全局环境中,调用方式如下: ```cpp lua_getglobal(L, "move"); // 获取move函数 if...
加载 DLL 后,你可以像调用 Lua 函数一样调用 C++ 函数: ```lua local result = lib.add(3, 5) print(result) -- 输出:8 ``` 6. **异常处理**: 在 Lua 中,由于它没有内置的异常机制,你需要在 C++ 侧处理...
- 使用LUA C API,如`lua_pushstring`、`lua_setglobal`、`lua_getglobal`等函数,将C++类的方法和属性映射到LUA全局表上。 - 对C++类的构造函数、析构函数、成员函数进行封装,使其能在LUA环境中被调用。 - 在...
这个工具会扫描头文件并自动生成相应的Lua绑定代码,使得Lua可以理解和调用C++函数。 3. **编译和链接DLL**: - 编译生成的C++源代码,生成DLL文件以及对应的.lib文件。 - 注意设置正确的输出目录,确保Lua可以...
8. **工具支持**:有一些工具可以帮助进行Lua和C++的集成,如luabind、sol2等库,它们提供了更高级别的抽象,使得绑定C++函数到Lua变得更加简单。 通过以上介绍,我们可以看到Lua和C++的交互不仅提高了开发效率,也...
在你提供的标题和描述中,提到了Sublime Text能够运行JavaScript、Lua和C++代码,这主要得益于特定的编译系统配置和插件的支持。 首先,Sublime Text本身并不直接具备执行代码的功能,但它允许用户配置各种构建系统...
这些生成的代码包含了解析和序列化protobuf消息的函数,它们将被C++/Lua桥接库所使用。 "protocgenlua" 这个标签表明项目还涉及到`protoc`编译器生成 Lua 代码的能力。在protobuf的编译过程中,通过使用特定的插件...
同时,你也需要包含相应的头文件,以便在C++代码中使用Lua函数和数据结构。 描述中提到的“csdn博客上有详细的学习步骤和解析”,这表明你可以在该平台上找到更具体的操作指南。通常,这些步骤会包括设置项目配置、...
在这种场景下,LuaAction提供了一种高效的方法,允许C++代码直接访问和调用Lua中的函数,实现了两者的无缝集成。本文将详细阐述如何利用LuaAction来实现这一功能,以及它所支持的特性。 首先,LuaAction的核心特性...
因此,你需要在C++代码中定义加密解密函数,并通过这些接口暴露给Lua。 在C++中,我们可以使用各种加密库,如OpenSSL,它提供了丰富的加密解密算法,如AES、RSA等。对于证书处理,OpenSSL的X509和PKCS#12模块可以...
c2lua是专门为lua和C++集成而设计的一个工具,它允许lua代码直接调用C++编写的函数,极大地拓展了lua的应用范围。本文将深入探讨c2lua的工作原理、使用方法以及实践中的注意事项,旨在为读者提供一个全面的理解和...
1. **Lua-C++接口**:这是中间层的基础,通过tolua++或tolua+等工具生成C++接口,使得C++代码可以暴露给Lua,同时Lua代码也能调用C++函数。 2. **对象映射**:为了在Lua中操作C++对象,需要建立一种映射机制,将C++...
Lua与C++的交互通常通过Lua的C API实现,这个API提供了多种函数,如luaL_newstate、luaL_loadbuffer等,用于创建和管理Lua虚拟机,加载和执行Lua代码。在封装过程中,我们通常会创建一组C++接口,这些接口对应于 Lua...
2. **C++与Lua的绑定**:C++和Lua的交互主要依赖于luaBridge、tolua++或tolua等库,它们提供API让C++函数可以调用Lua脚本,反之亦然。在本项目中,我们可能会看到如何使用这些库注册C++函数到Lua环境,以及如何在Lua...
本文将详细讲解如何在C++中调用Lua函数,并提供一个简单的源代码案例作为参考。 首先,我们需要了解C++与Lua交互的基础。Lua是一个轻量级的脚本语言,它的设计目标是易于嵌入到其他应用中,而C++则是一种通用的、...