簡體   English   中英

在編譯器類中查找編譯和評估方法等的Pharo文檔

[英]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:生成編碼。 您應該調試每個方法以深入理解編譯過程。 鑒於你正在處理一棵樹,准備通過很多訪客導航。

一旦您熟悉了主要想法,您可能需要嘗試更詳細的 - 簡單示例,以查看進入場景的其他對象。

以下是一些簡單的事實:

  1. Smalltalk的評估隨處可見:工作區,成績單,瀏覽器,檢查員,調試器等。基本上,如果允許您編輯文本,很可能您也可以對其進行評估。
  2. 有4個評估命令

    • 這樣做(評估沒有顯示答案)
    • 打印它(評估並打印表達式旁邊的答案)
    • 檢查它(評估並打開結果的檢查員)
    • 調試它(打開一個調試器,這樣你就可以逐步評估你的表達式)。
  3. 您的表達式可以包含任何文字(數字,數組,字符串,字符等)

     17 "valid expression" 
  4. 您的表達式可以包含任何消息。

     3 + 4. 'Hello world' size. 1 bitShift: 28 
  5. 您的表達式可以使用任何全局變量

     Object new. Smalltalk compiler 
  6. 你的表達可以引用selfsupertruenilfalse

     SharedRandom globalGenerator next < 0.2 ifTrue: [nil] ifFalse: [self] 
  7. 您的表達式可以使用在您編寫的窗格的上下文中聲明的任何變量。 例如:

    • 如果您在類瀏覽器中編寫,則self將綁定到當前類
    • 如果您在檢查員中寫作,則self被綁定到被檢查的對象。 您還可以在表達式中使用其實例變量。
    • 如果您在調試器中,您的表達式可以引用self ,實例變量,消息參數,臨時值等。

在此輸入圖像描述

  1. 最后,如果您在工作區(也稱為Playground),您可以使用任何臨時工具,這些臨時工具將自動創建並記住,而無需您聲明它們。

在此輸入圖像描述

就像我所知,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM