日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Inside IronPython: IronPython AST语法树(2/2)

發布時間:2023/12/9 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Inside IronPython: IronPython AST语法树(2/2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上篇: Inside IronPython: IronPython AST語法樹(1/2)

ASTs簡介:

當 ipy.exe 執行demo.py的時候,IronPython語言自身的實現和DLR共同參與源代碼的編譯處理。從基本層面上來講,編譯器是流水化作業的:從語法解析器生成描述源代碼的特定數據結構開始。這個數據結構是個抽象語法樹(abstract syntax tree),簡稱為AST。編譯器在完成代碼分析階段后將轉換AST或者建立新的數據結構,然后再基于此結果,編譯器產生機器碼或者虛擬機的中間語言(IL)。

IronPython首先產生一個特定于IronPython的抽象語法樹,然后再把這個語法樹轉換成DLR的語法樹。一些語言有自己的語法樹的原因是這樣可以更好的支持對代碼進行分析,也能更好的支持一些基于自有AST的工具(工具需要一個更接近于源代碼的AST。許多語言的AST也許和DLR的AST比較相似,但是DLR的AST包含更多關于確切語義含義的信息。你可以認為DLR AST是編譯器需要的多個轉換中較晚階段需要的那個。

非常有趣的是DLR使用了和CLR Jit編譯技術相似的緩式編譯技術:并不是一下子編譯全部的代碼。這樣在第一次運行的時候我們會有一點點的性能損耗,但是以后執行時可以運行的更快。

查看IronPython的AST

回到VS IDE中,按F5執行程序,在斷點處暫停(其實在你安裝的IronPython中,第一次到達斷點時,并不是處理demo.py文件,而是一個名叫site.py的文件。因為在我們的...\Bin\Debug目錄下根本沒有這個文件,所以就直接處理demo.py文件了)。接下來我們按F10單步執行程序,直到執行了:ast = parser.ParseFile(true);。現在我們就可以在“監視”窗口中查看IronPython的AST了。

由于空間問題, 我只在圖中展開了ast.Body的部分成員。AST的根節點是SuiteStatement,表示了一系列的語句,它有一個成員:Statements。展開Statements中的第一個成員,將看到這個成員是個FunctionDefinition類型的節點,它有一個Body成員(又是一個SuiteStatement類型):表示函數的定義,我們可以看到它有一個Name 成員,并且最后它的名字將綁定到結果函數對象。我們展開demo.py中所有元素,它們之間的關系如下圖所示:

這樣我們就能直觀的看到AST樹,大部分的節點都有子節點。圖中給出了各個節點的類型信息(例如FunctionDefinition類型的節點有一個SuiteStatement類型的子節點。有些節點包含了用縮進和花括號描述的子節點信息。

轉載于:https://www.cnblogs.com/Jifangliang/archive/2008/07/30/1256041.html

總結

以上是生活随笔為你收集整理的Inside IronPython: IronPython AST语法树(2/2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。