lua解析器用什么写的?

lua解析器用什么写的?,第1张

没有汇编,只有C语言,而且是最基本的C语言。

lua官方的解释器为保证lua解释器的可移植性和可嵌入性,用纯ANSI C写的,即其中只有保持最大兼容要求的标准C语言代码……通俗点说,没有使用任何各种编译器的方言语法以及更高版本的C语言语法,甚至没有使用复杂的函数库,在通俗点说就是只引入了std开头的那些C语言库,比如说常见的stdio.h和stdlib.h……

但是嵌入性是lua解释器的基本要求之一,你可以将其嵌入到自己的程序里面作为扩展,其本身也具有很强的扩展性,所以如果你问lua解释器本身,毫无疑问是C语言,如果是嵌入了lua的产品可能成分就并不单纯了……

源码可在此处下载到,整个源码只有五百来K,感兴趣可以看一下:

http://www.lua.org/download.html

调用 GetLuaVar(luastate,"Project.A.one") 把Project.A.one的值取到堆栈上,然后根据类型自己用 lua_tonumber(luastate, -1) 或 lua_tostring(luastate, -1)得数据void GetLuaVar(lua_State* pLuaState,const char* strVarName){const char* pIndS = strVarNameconst char* pIndE = strVarNameT_B8 bParts = false//判断是否分两部分,因为第一部分要用lua_getglobal,其他部分用lua_gettablewhile( 0 != *pIndE ){if( '.' == *pIndE ){if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())lua_gettable(pLuaState,-2)lua_remove(pLuaState,-2)}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())bParts = true}++pIndEpIndS = pIndE}else{++pIndE}}if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())lua_gettable(pLuaState,-2)lua_remove(pLuaState,-2)}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())}}

核心是字符串的 *** 作,具体编写了两个方法,字符串匹配以及字符串分组。主要用到的方法有:

●string.find("str","str",index)

●string.sub("str",startIndex,endIndex)

●string.match("str","matchStr")

分割字符串:

字符串匹配:

这个方法只会匹配最开始找到的字符串,不会找后面的。

具体使用:

如果是多个同一种数据体的xml,咱们的先使用Split方法把每一个数据体分开,然后使用GetXMLValue挨着取值。

如果是单独数据体,直接使用GetXMLValue取值即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6282440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存