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

首頁綜合 正文
目錄

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

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

http://yzkb.51969.com/

前言

本篇在講什么

Lua的詞法分析

本篇需要什么

對Lua語法有簡單認(rèn)知 對C++語法有簡單認(rèn)知 依賴Visual Studio工具

本篇的特色

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

★提高閱讀體驗★

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

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

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

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

目錄

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

? 前言

? luaL_dofile

在C++中我們通過luaL_dofile宏來加載一個lua文件,如下述代碼所示

int main()

{

lua_State* L = luaL_newstate();

luaL_openlibs(L);

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

lua_close(L);

}

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

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

? 保留字

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

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

? token

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

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

舉個例子,我們在腳本test.lua中定義了一句Lua代碼,如下圖所示,其解析過程如下:

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

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

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

luaL_loadfile

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

luaY_parser

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

luaX_next

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

chunk

解析token的函數(shù)

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

? 實例詳解

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

local num = 1

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

2、第二個斷點我們打在了statement函數(shù)里,可以看到因為獲取的token是TK_LOCAL所以執(zhí)行到了對應(yīng)的case里面

3、第三個斷點我們打在了luaX_next函數(shù)里,從堆棧中看到新獲取的token是285,對應(yīng)的是TK_NAME,因為lua中的num是我們自定義的變量

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

5、放開斷點繼續(xù)執(zhí)行,依然卡到了luaX_next里面,這里可一看獲取到的token是284,對應(yīng)的類型是TK_NUMBER,因為我們在Lua中給變量num賦值是數(shù)字1,

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

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

? 推送

Github

https://github.com/KingSun5

? 結(jié)語

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

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

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

http://yzkb.51969.com/

精彩文章

評論可見,查看隱藏內(nèi)容

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

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

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

發(fā)布評論

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

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄