Clang 中 AST 相關類簡介(不定時更新)

2021-09-24 23:10:56 字數 2776 閱讀 3318

2. stmt(statement)

3. expr(expression)

它表示程式中的乙個宣告。

表示乙個函式宣告(declaration)或定義(definition)。

因為乙個給定的函式可以在程式中宣告多次,所以可能有幾個functiondecls對應於該函式。當遍歷此functiondecl上下文中的宣告列表時(例如,翻譯單元),只會找到其中的乙個functiondecl;這個functiondecl包含關於函式的所有已知資訊。另外,此函式的前置宣告可以通過getpreviousdecl()鏈獲得。

乙個函式宣告可能是:

declarationnameinfo getnameinfo() const

使用它來獲取函式名:

functiondecl *f;

std::string funcname = f-

>

getnameinfo()

.getname()

.getasstring()

;

qualtype getreturntype() const獲取函式的返回型別

sourcerange getsourcerange() constbool hasbody() const

如果此 decl 表示**體(如函式或方法定義)的宣告,則返回 true。

注意,如果這個 decl 的任何 redeclaration 表示**體的宣告,那麼 hasbody 也可以返回 true。

bool isdefined() const

如果函式的有乙個不需要被例項化(instantiate)的定義,則返回true。

函式的引數遍歷

functiondecl *f;

rewriter rw;

for(functiondecl::param_iterator start = f-

>

param_begin()

, end = f-

>

param_end()

; start!=end; start++

)

這個類表示程式中的乙個語句。語句是程式的基本構建塊,乙個語句相當於一條完整的計算機指令,大部分語句都以;結尾。包括:

int i;

// 這是乙個宣告

i =5

;// 這是乙個語句;`i = 5`是乙個表示式

它表示程式中的乙個表示式。表示式是由運算子和運算物件組成,運算物件可以是常量、變數或二者的結合。一些表示式由子表示式(非full-expression)組成。表示式最重要的特性之一就是每個表示式都有乙個值。變數、常量、函式呼叫本身也是乙個表示式。

代表乙個「full-expression」節點,完全表示式即它不是另乙個表示式的子表示式。

它表示乙個表示式(通常是full-expression),該表示式引入要在子表示式求值結束時執行的清理(cleanup)。

表示式引入的清理最常見的**是 c++ 中的臨時物件(temporary objects),但是其他幾種表示式也會建立清理,包括 arc 中返回乙個 objective-c 指標的每個呼叫。

該表示式還跟蹤子表示式是否包含乙個潛在求值的block literal。 乙個block literal的生命週期是enclosing scope的長度(extent)。

該類的 public 成員:

3.3 callexpr

它表示乙個函式呼叫(c99 6.5.2.2, c++ [expr.call])。callexpr本身表示乙個普通的函式呼叫,例如,f(x, 2)

它的子類可以表示導致乙個函式呼叫的替代語法(語義上)。例如,cxxoperatorcallexpr是它的乙個子類,用於過載操作符呼叫,該子類使用操作符語法,例如str1 + str2解析為乙個函式呼叫。

它的 public 成員函式:

C 中類相關

1 隱藏基類方法 1 在子類中使用new關鍵字顯示的隱藏基類中的方法,基類的方法是虛擬的或非虛擬的都可以 2 如果繼承的方法是虛擬的 virtual 可以用override關鍵字重寫方法的實現 public class mybaseclass public class myderivedclass ...

PHP中Array相關函式簡介

使用函式array keys 得到陣列中所有的鍵,引數 陣列 arr array arr one one arr two程式設計客棧 two arr three three newarr array keys arr print r newarr array 0 one 1 two 2 three ...

執行緒管理之Thread類相關方法簡介

currentthread 靜態方法 currentthread 方法可返回 段正在被那個執行緒呼叫的資訊。簡單案列 列印main 方法,正在被那個執行緒呼叫 package com.zzg.thread import com.zzg.obj.threadobj1 public class thre...