`
lua
  • 浏览: 76374 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Lua 解析C++代码tokens简单函数

阅读更多

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)

分享到:
评论

相关推荐

    lua调用C++函数

    6. **运行Lua代码**:使用`luaL_dostring`或`luaL_dofile`执行Lua脚本中的代码,这将调用之前注册的C++函数。 7. **内存管理**:C++函数中可能需要分配或释放内存,需要注意与Lua的垃圾回收机制协调。例如,使用`...

    Lua调用C++函数实现

    这主要通过 Lua 的 C API 实现,它提供了一套 C 函数供外部语言(如 C++)调用,同时也允许外部代码注册函数给 Lua 使用。在 C++ 中,我们可以创建一个 Lua 共享库,其中包含用于与 Lua 交互的函数。 1. **创建 Lua...

    tolua++ 版helloworld (lua脚本调用C++类的成员函数方法)

    关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,Main.cpp ,build_pgk.bat 1.启动CodeBlocks...

    Lua的最基本使用 C++与lua的互相调用

    LuaExample中的示例可能包含一个简单的C++程序,该程序加载一个Lua脚本,定义一个C++函数,然后在Lua中调用这个函数。同时,Lua脚本也可能调用C++注册的函数,完成数据交互。 四、注意事项 1. 错误处理:在C++调用...

    lua_test.rar_C++_c# lua_c++ lua_lua_lua调用C++

    这可能是一个包含Lua脚本的文件,其中包含了调用C++函数的代码。在Lua中,调用C++函数通常需要通过全局环境中的一个表(table)来完成,这个表是C++导出给Lua的接口。例如,你可能会看到类似以下的Lua代码: ```lua...

    Lua的使用入门之在C++程序中调用lua函数1

    要从C++中调用Lua函数,首先需要使用`lua_getglobal()`获取全局函数引用,然后通过`lua_pcall()`执行该函数。假设`move`函数在全局环境中,调用方式如下: ```cpp lua_getglobal(L, "move"); // 获取move函数 if...

    lua 调用 c++ dll 示例

    加载 DLL 后,你可以像调用 Lua 函数一样调用 C++ 函数: ```lua local result = lib.add(3, 5) print(result) -- 输出:8 ``` 6. **异常处理**: 在 Lua 中,由于它没有内置的异常机制,你需要在 C++ 侧处理...

    LUA调用C++类

    - 使用LUA C API,如`lua_pushstring`、`lua_setglobal`、`lua_getglobal`等函数,将C++类的方法和属性映射到LUA全局表上。 - 对C++类的构造函数、析构函数、成员函数进行封装,使其能在LUA环境中被调用。 - 在...

    lua调用C++的经典实例.rar

    这个工具会扫描头文件并自动生成相应的Lua绑定代码,使得Lua可以理解和调用C++函数。 3. **编译和链接DLL**: - 编译生成的C++源代码,生成DLL文件以及对应的.lib文件。 - 注意设置正确的输出目录,确保Lua可以...

    lua和c++交互

    8. **工具支持**:有一些工具可以帮助进行Lua和C++的集成,如luabind、sol2等库,它们提供了更高级别的抽象,使得绑定C++函数到Lua变得更加简单。 通过以上介绍,我们可以看到Lua和C++的交互不仅提高了开发效率,也...

    能运行js-lua-c++代码的sublime-解压直接使用

    在你提供的标题和描述中,提到了Sublime Text能够运行JavaScript、Lua和C++代码,这主要得益于特定的编译系统配置和插件的支持。 首先,Sublime Text本身并不直接具备执行代码的功能,但它允许用户配置各种构建系统...

    lua protobuf in c++

    这些生成的代码包含了解析和序列化protobuf消息的函数,它们将被C++/Lua桥接库所使用。 "protocgenlua" 这个标签表明项目还涉及到`protoc`编译器生成 Lua 代码的能力。在protobuf的编译过程中,通过使用特定的插件...

    lua+c++ vs2013

    同时,你也需要包含相应的头文件,以便在C++代码中使用Lua函数和数据结构。 描述中提到的“csdn博客上有详细的学习步骤和解析”,这表明你可以在该平台上找到更具体的操作指南。通常,这些步骤会包括设置项目配置、...

    LuaAction C++访问LUA函数

    在这种场景下,LuaAction提供了一种高效的方法,允许C++代码直接访问和调用Lua中的函数,实现了两者的无缝集成。本文将详细阐述如何利用LuaAction来实现这一功能,以及它所支持的特性。 首先,LuaAction的核心特性...

    Lua调用C++证书加密解密文件函数实现

    因此,你需要在C++代码中定义加密解密函数,并通过这些接口暴露给Lua。 在C++中,我们可以使用各种加密库,如OpenSSL,它提供了丰富的加密解密算法,如AES、RSA等。对于证书处理,OpenSSL的X509和PKCS#12模块可以...

    lua调用C++_c2lua

    c2lua是专门为lua和C++集成而设计的一个工具,它允许lua代码直接调用C++编写的函数,极大地拓展了lua的应用范围。本文将深入探讨c2lua的工作原理、使用方法以及实践中的注意事项,旨在为读者提供一个全面的理解和...

    一个简单的Lua与C++中间层

    1. **Lua-C++接口**:这是中间层的基础,通过tolua++或tolua+等工具生成C++接口,使得C++代码可以暴露给Lua,同时Lua代码也能调用C++函数。 2. **对象映射**:为了在Lua中操作C++对象,需要建立一种映射机制,将C++...

    lua的C++访问封装version2

    Lua与C++的交互通常通过Lua的C API实现,这个API提供了多种函数,如luaL_newstate、luaL_loadbuffer等,用于创建和管理Lua虚拟机,加载和执行Lua代码。在封装过程中,我们通常会创建一组C++接口,这些接口对应于 Lua...

    Lua与C++的交互

    2. **C++与Lua的绑定**:C++和Lua的交互主要依赖于luaBridge、tolua++或tolua等库,它们提供API让C++函数可以调用Lua脚本,反之亦然。在本项目中,我们可能会看到如何使用这些库注册C++函数到Lua环境,以及如何在Lua...

    c++ 调用lua函数简单案例

    本文将详细讲解如何在C++中调用Lua函数,并提供一个简单的源代码案例作为参考。 首先,我们需要了解C++与Lua交互的基础。Lua是一个轻量级的脚本语言,它的设计目标是易于嵌入到其他应用中,而C++则是一种通用的、...

Global site tag (gtag.js) - Google Analytics