[英]Finding the Pharo documentation for the compile & evaluate methods, etc. in the compiler class
我這里有一個令人尷尬的簡單問題。 我是一個小小的新手(我試圖每5年左右嘗試一次),而且我已經運行了Pharo 6.1。 我如何尋找官方標准庫文檔? 特別是對於編譯器類? 比如編譯和評估方法? 我沒有看到如何使用幫助瀏覽器執行搜索,並且編譯器類中的方法注釋相當簡潔和神秘。 我也沒有看到標准庫API文檔的明顯鏈接: http : //pharo.org/documentation 。 書中的“Pharo by Example”和“Deep into Pharo”似乎也沒有涵蓋那個類。 我想這個類可能與Squeak和其他小元素類似,因此編譯器類的文檔鏈接也可能有用。
謝謝!
在編寫方法(或表達式)時,有幾個類合作,鑒於您對該主題的興趣,我很想在您的學習和理解中進一步激勵您。
一般來說,主要類是Scanner,Parser,Compiler和Encoder。 根據方言,這些名稱和實現可能略有不同,但中心思想保持不變。
Scanner解析源代碼的字符流並生成令牌流。 然后,這些令牌由解析器解析,解析器將它們轉換為AST(抽象語法樹)的節點。 然后編譯器訪問AST的節點以在語義上分析它們。 這里所有變量節點都被分類:方法參數,方法臨時值,共享塊,塊參數,塊臨時值等。在此分析過程中,所有變量都綁定在相應的范圍內。 此時,AST不再是“抽象的”,因為它已經使用綁定信息進行了注釋。 最后,重新訪問節點以生成編譯方法的文字框架和字節碼。
當然,我從這個總結(編譯指示,塊閉包等)中省略了很多東西,但考慮到這些基本思想,你現在應該准備好調試一個非常簡單的例子。 例如,從...開始
Object compile: 'm ^3'
內化過程。
經過一段時間的踩踏,你會得到第一個有趣的代碼片段OpalCompiler >> #compile
。 如果我們刪除錯誤處理塊,這個方法就說明了一切:
compile
| cm |
ast := self parse.
self doSemanticAnalysis.
self callPlugins.
cm := ast generate: self compilationContext compiledMethodTrailer
^cm
首先,我們有#parse
消息,其中創建了解析節點。 然后我們進行了上面提到的語義分析,最后#generate:
生成編碼。 您應該調試每個方法以深入理解編譯過程。 鑒於你正在處理一棵樹,准備通過很多訪客導航。
一旦您熟悉了主要想法,您可能需要嘗試更詳細的 - 簡單示例,以查看進入場景的其他對象。
以下是一些簡單的事實:
有4個評估命令
您的表達式可以包含任何文字(數字,數組,字符串,字符等)
17 "valid expression"
您的表達式可以包含任何消息。
3 + 4. 'Hello world' size. 1 bitShift: 28
您的表達式可以使用任何全局變量
Object new. Smalltalk compiler
你的表達可以引用self
, super
, true
, nil
, false
。
SharedRandom globalGenerator next < 0.2 ifTrue: [nil] ifFalse: [self]
您的表達式可以使用在您編寫的窗格的上下文中聲明的任何變量。 例如:
self
將綁定到當前類 self
被綁定到被檢查的對象。 您還可以在表達式中使用其實例變量。 self
,實例變量,消息參數,臨時值等。 就像我所知,Pharo標准庫沒有API文檔,就像你在其他編程語言中找到的那樣。 這似乎在Pharo用戶的郵件列表中得到了證實: http : //forum.world.st/Essential-Documentation-td4916861.html
...有一個ANSI標准的草案版本: http : //wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf
...但似乎並沒有涵蓋編譯器類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.