欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:Lua學(xué)習(xí)筆記:詞法分析

柚子快報(bào)邀請(qǐng)碼778899分享:Lua學(xué)習(xí)筆記:詞法分析

http://yzkb.51969.com/

前言

本篇在講什么

Lua的詞法分析

本篇需要什么

對(duì)Lua語(yǔ)法有簡(jiǎn)單認(rèn)知 對(duì)C++語(yǔ)法有簡(jiǎn)單認(rèn)知 依賴(lài)Visual Studio工具

本篇的特色

具有全流程的圖文教學(xué) 重實(shí)踐,輕理論,快速上手 提供全流程的源碼內(nèi)容

★提高閱讀體驗(yàn)★

? ? 一級(jí)標(biāo)題 ?

? ? 二級(jí)標(biāo)題 ?

? ? 三級(jí)標(biāo)題 ?

? ? 四級(jí)標(biāo)題 ?

目錄

? 前言? luaL_dofile? 保留字? token? 關(guān)鍵函數(shù)? 實(shí)例詳解? 推送? 結(jié)語(yǔ)

? 前言

? luaL_dofile

在C++中我們通過(guò)luaL_dofile宏來(lái)加載一個(gè)lua文件,如下述代碼所示

int main()

{

lua_State* L = luaL_newstate();

luaL_openlibs(L);

luaL_dofile(L, "lua_src/test.lua");

lua_close(L);

}

其實(shí)際上執(zhí)行了兩個(gè)函數(shù),分別是luaL_loadfile和lua_pcall,二者包括宏均定義在lauxlib.h腳本內(nèi)

本篇重點(diǎn)去認(rèn)識(shí)和了解luaL_loadfile函數(shù),在該函數(shù)內(nèi)去對(duì)一個(gè)Lua文件進(jìn)行詞法分析

? 保留字

我們先了解一下Lua的一些保留字,其定義在llex.h腳本當(dāng)中,每一個(gè)保留字都對(duì)應(yīng)了Lua中某個(gè)關(guān)鍵字或類(lèi)型,比如TK_AND代指的就是and關(guān)鍵字

保留字定義為int類(lèi)型,從257開(kāi)始,以此遞增,原因是Lua識(shí)別字符的時(shí)候通過(guò)Ascii碼來(lái)標(biāo)記,防止二者有沖突

? token

我們先了解一下什么是token,其代指的保留字相關(guān)的枚舉類(lèi)型,每一個(gè)都是一個(gè)token類(lèi)型

Lua在做詞法分析的時(shí)候會(huì)根據(jù)不同的token類(lèi)型去執(zhí)行不同的方法,詞法分析的過(guò)程可以理解成對(duì)每一個(gè)token分析的過(guò)程

舉個(gè)例子,我們?cè)谀_本test.lua中定義了一句Lua代碼,如下圖所示,其解析過(guò)程如下:

1、local ——> TK_LOCAL(268) 2、空格 ——> 32(空格ascii碼) 3、num ——> TK_NAME(285)(自定義變量) 4、空格 ——> 32(空格ascii碼) 5、等號(hào) ——> 61(=的ascii碼) 6、空格 ——> 32(空格ascii碼) 7、1 ——> TK_NUMBER(數(shù)字1,ascill碼61)

? 關(guān)鍵函數(shù)

我們了解一下個(gè)詞法分析相關(guān)的重要函數(shù)和作用

luaL_loadfile

解析Lua腳本,獲取腳本內(nèi)的二進(jìn)制或字節(jié)流

luaY_parser

詞法分析的核心函數(shù)

luaX_next

解析字節(jié)流中的下一個(gè)token塊

chunk

解析token的函數(shù)

簡(jiǎn)單的概括下對(duì)一段Lua代碼進(jìn)行詞法分析都經(jīng)歷了哪些步驟

? 實(shí)例詳解

我們直接通過(guò)斷點(diǎn)調(diào)試和堆棧信息查看,來(lái)看看解析一段Lua代碼的過(guò)程,這里直接從luaY_parser函數(shù)開(kāi)始,Lua代碼如下所示

local num = 1

1、運(yùn)行代碼后第一個(gè)斷點(diǎn)卡在了chunk函數(shù),我們可以通過(guò)堆棧信息看到&lexstate中獲取的第一個(gè)token是268,對(duì)應(yīng)的正是Lua中的local

2、第二個(gè)斷點(diǎn)我們打在了statement函數(shù)里,可以看到因?yàn)楂@取的token是TK_LOCAL所以執(zhí)行到了對(duì)應(yīng)的case里面

3、第三個(gè)斷點(diǎn)我們打在了luaX_next函數(shù)里,從堆棧中看到新獲取的token是285,對(duì)應(yīng)的是TK_NAME,因?yàn)閘ua中的num是我們自定義的變量

4、放開(kāi)斷點(diǎn)繼續(xù)執(zhí)行,依然卡到了luaX_next里面,這里可一看獲取到的token是61,對(duì)應(yīng)的就是=的ascii碼

5、放開(kāi)斷點(diǎn)繼續(xù)執(zhí)行,依然卡到了luaX_next里面,這里可一看獲取到的token是284,對(duì)應(yīng)的類(lèi)型是TK_NUMBER,因?yàn)槲覀冊(cè)贚ua中給變量num賦值是數(shù)字1,

6、繼續(xù)執(zhí)行,獲取的最后一個(gè)token是287,對(duì)應(yīng)的類(lèi)型是TK_EOS,該token類(lèi)型代表著解析結(jié)束

至此,我們對(duì)該Lua代碼的詞法解析就全部結(jié)束了

? 推送

Github

https://github.com/KingSun5

? 結(jié)語(yǔ)

若是覺(jué)得博主的文章寫(xiě)的不錯(cuò),不妨關(guān)注一下博主,點(diǎn)贊一下博文,另博主能力有限,若文中有出現(xiàn)什么錯(cuò)誤的地方,歡迎各位評(píng)論指摘。

? 本文屬于原創(chuàng)文章,轉(zhuǎn)載請(qǐng)?jiān)u論留言,并在轉(zhuǎn)載文章頭部著名作者出處?

柚子快報(bào)邀請(qǐng)碼778899分享:Lua學(xué)習(xí)筆記:詞法分析

http://yzkb.51969.com/

精彩文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19234839.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄