Lua學習系列(二)

2022-01-12 09:02:49 字數 986 閱讀 8669

資源整理:

風雲老師部落格:

知乎:除了c語言之外還需要什麼能力?

如果說是為了培養程式設計能力,是否有更好的方式?

前面已經說的很多了.

我來補充一點吧.lua裡面用到編譯知識確實不多,也不太難,比如語法解析用的是最簡單的遞迴下降,而不是lalr之模擬較難的.

但並不是說lua裡面用到的相應知識就一定簡單.比如lua是一遍分析的,我們學編譯的時候一般是兩遍,一遍先生成分析樹,然後再遍歷一遍生成opcode,而lua跳過了生成分析樹這一步直接生成opcode,另外語法翻譯這部分我現在看的還是比較頭大.

簡而言之,我認為lua中用到的編譯的知識基本上到龍書的第五章語法制導翻譯這部分就足矣了.但是知識點少,並不意味著就是簡單,因為lua追求的時簡潔和高效.

lua**重點的部分除了資料結構,演算法,詞法語法,gc,vm等部分,還能夠通過堆疊與c**互動,如果你所謂的看lua原始碼是要懂得這些的話,需要深入了解不只c,還有彙編和作業系統。如果單就能夠了解lua語言或了解直譯器**的話,能夠對c的指標、暫存器、函式呼叫較為了解的話,就可以較為順利的閱讀了。

可以看看雲風老大的文章,對lua**有乙個大致的概念了解。

這個問題是所謂的如何閱讀開源**的問題的乙個典型例子。

首先你應該了解你想要閱讀的原始碼是什麼,如果你對你要閱讀的原始碼缺乏基礎的了解,那你就應該先去了解一下。 然後你就要對他進行歸類,這樣你才能做到有目的性的學習。然後就是針對歸類進行專業的學習了。

其實對於很多開源**來說,你會那種語言到什麼程度,根本無足輕重。

拿你說的lua來說,他應該屬於直譯器/編譯器類的**,他的核心內容是語法分析,語義分析等等等等等編譯或解釋過程。從電腦科學的學科上來講,他應該屬於編譯原理的範疇,編譯原理的先導學科有很多,比如形式語言與自動機,比如句法結構等等。如果這些東西你掌握到家了 參照其**中的注釋,你可以很輕鬆的對其進行劃分,然後你就可以輕鬆的自頂而下,分而治之了,到這種時候,其實你會的到底是c還是pascal已經不重要了。因為你都可以輕鬆的理解**中的真正精髓的東西

Lua單例(lua學習二)

require class charactermanager class new nil local this charactermanager function this getinstance if nil self.m instance then self.m instance self ne...

Lua 學習筆記(二)

這一章我們介紹一下lua中函式的宣告,其實函式這東西我們每個人都接觸過,就像我們初中高中學的一次函式 二次函式是一樣的。舉個簡單的例子吧,目前歐元匯率和人民幣匯率的比例是1歐元換7.2人民幣,那我們手裡有100歐元能換多少人民幣呢?如果是1000歐元呢?遇到這種問題的時候,我們就需要找到乙個規律,然...

Lua學習筆記(二) 函式

1 可以在字串前放置操作符 來獲得該字串的長度 for i 1,arr do print arr i end注 上面的程式中 arr的意思就是arr的長度。注 lua 中的變數,如果沒有 local 關鍵字,全都是全域性變數,lua也是用 table 來管理全域性變數的,lua把這些全域性變數放在了...