freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)類型檢查基礎(chǔ)知識(shí)(編輯修改稿)

2025-03-26 08:40 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 3 簡(jiǎn)單類型檢查器的說(shuō)明( 8) ? 類型轉(zhuǎn)換 ? 語(yǔ)言類型規(guī)則的一個(gè)常用擴(kuò)充是允許混合類型的算術(shù)表達(dá)式,如表達(dá)式 3+ ? 此時(shí),如果類型規(guī)則不做擴(kuò)充,對(duì)不匹配的類型進(jìn)行操作時(shí),要報(bào)錯(cuò) ? 上述擴(kuò)充允許強(qiáng)制類型轉(zhuǎn)換: (float)3+ ? 類型轉(zhuǎn)換的種類:不同的語(yǔ)言使用不同的類型轉(zhuǎn)換方式 ? 顯式類型轉(zhuǎn)換: ? 由程序員顯式地調(diào)用內(nèi)置的轉(zhuǎn)換函數(shù) ? 隱式類型轉(zhuǎn)換 ? 當(dāng)類型不匹配時(shí)自動(dòng)調(diào)用強(qiáng)制類型轉(zhuǎn)換 32 June 5, 2023 簡(jiǎn)單類型檢查器的說(shuō)明( 9) ? 類型轉(zhuǎn)換的基本原則: ? 不丟失信息 ? 類型的提升一般不會(huì)丟失信息,如 short轉(zhuǎn)換為 int, 或int轉(zhuǎn)換為 float等 ? float轉(zhuǎn)換為 int可能會(huì)丟失信息 ? 一個(gè)語(yǔ)言是否使用強(qiáng)制類型轉(zhuǎn)換? ? 不允許強(qiáng)制類型轉(zhuǎn)換 ? 任何類型失配都是錯(cuò)誤,如 Ada、 Pascal ? 允許強(qiáng)制類型轉(zhuǎn)換 ? 類型失配時(shí)尋找合適的類型轉(zhuǎn)換 ? 找不到合適的類型轉(zhuǎn)換時(shí),再報(bào)錯(cuò) ? 強(qiáng)制類型轉(zhuǎn)換可能隱藏了原本在編譯時(shí)刻可以知道的程序設(shè)計(jì)錯(cuò)誤 33 June 5, 2023 簡(jiǎn)單類型檢查器的說(shuō)明( 10) ? 從整型到實(shí)型的類型檢查規(guī)則: E→num { := integer } E→ { := real } E→id { := lookup() } E→E1 op E2 { := if = integer and = integer then integer else if = integer and = real then real else if = real and = integer then real else if = real and = real then real else type_error } 34 June 5, 2023 類型表達(dá)式的等價(jià)( 1) ? 類型等價(jià) ? 類型檢查經(jīng)常要面臨的問(wèn)題: 兩個(gè)類型表達(dá)式是否表示相同的類型 struct t1 { struct t2 { int x。 int x1。 int y[100]。 int y1[100]。 }。 }。 ? 類型等價(jià)和類型表示是相互影響的 ? 類型等價(jià)的常用形式 ? 結(jié)構(gòu)等價(jià) ? 名字等價(jià) ? 在類型等價(jià)中,遞歸定義如何處理 35 June 5, 2023 類型表達(dá)式的等價(jià)( 2) ? 類型表達(dá)式的結(jié)構(gòu)等價(jià) ? 結(jié)構(gòu)等價(jià)的定義 ? 兩個(gè)類型表達(dá)式是同樣的基本類型 ? 或兩個(gè)類型表達(dá)式是同樣的類型構(gòu)造器作用于結(jié)構(gòu)等價(jià)的類型 ? 即兩個(gè)類型表達(dá)式是完全相同的 ? 如 integer只等價(jià)于 integer, pointer(integer)只等價(jià)于pointer(integer)等 ? 當(dāng)類型表達(dá)式僅由類型構(gòu)造器作用于基本類型組成時(shí),可以使用這種等價(jià)的概念 ? 在實(shí)際實(shí)現(xiàn)時(shí)可能要放寬限制,如參數(shù)數(shù)組的界可以不考慮 36 June 5, 2023 類型表達(dá)式的等價(jià)( 3) ? 結(jié)構(gòu)等價(jià)的測(cè)試,兩個(gè)類型表達(dá)式 s和 t function sequiv( s , t ) : boolean。 begin if s和 t是相同的基本類型 then return true else if s = array( s1 , s2 ) and t = array( t1 , t2 ) then return sequiv( s1 , t1 ) and sequiv( s2 , t2 ) else if s = s1 s2 and t = t1 t2 then return sequiv( s1 , t1 ) and sequiv( s2 , t2 ) else if s = pointer( s1 ) and t = pointer( t1 ) then return sequiv( s1 , t1 ) else if s = s1 → s2 and t = t1 → t2 then return sequiv( s1 , t1 ) and sequiv( s2 , t2 ) else return false end 37 June 5, 2023 類型表達(dá)式的等價(jià)( 4) ? 數(shù)據(jù)類型結(jié)構(gòu)等價(jià)的例子 ? 兩個(gè)數(shù)組是等價(jià)的當(dāng)且僅當(dāng)它們有相同的大小和元素類型 ? 兩個(gè)結(jié)構(gòu)是等價(jià)的當(dāng)且僅當(dāng)它們有相同的元素,并且元素有相同的名字和順序 ? 結(jié)構(gòu)中,元素的順序是重要的 ? 如果不考慮數(shù)組的界,則數(shù)組等價(jià)的測(cè)試可以重寫(xiě)為: 如果有: s = array( s1 , s2 ) t = array( t1 , t2 ) 測(cè)試算法中的第 4和第 5行改寫(xiě)為: else if s = array( s1 , s2 ) and t = array( t1 , t2 ) then return sequiv( s2 , t2 ) 38 June 5, 2023 類型表達(dá)式的等價(jià)( 5) ? 類型表達(dá)式的名字等價(jià) ? 類型表達(dá)式的名字 ? 在某些語(yǔ)言中類型是可以命名的 ? 如果有下述的 Pascal的聲明 type link = ↑c(diǎn)ell。 var next: link。 last: link。 p: ↑c(diǎn)ell。 q, r: ↑c(diǎn)ell。 ? next, last, p, q, r是否有相同的類型? ? 這依賴于實(shí)現(xiàn),因?yàn)?Pascal中沒(méi)有定義術(shù)語(yǔ)“相同的類型” ? 類型名可以出現(xiàn)在類型表達(dá)式中只有基本類型可以出現(xiàn)的地方 39 June 5, 2023 類型表達(dá)式的等價(jià)( 6) ? 類型表達(dá)式的名字等價(jià) ? 把類型名看成一個(gè)可區(qū)別的類型 ? 兩個(gè)類型表達(dá)式名字等價(jià)當(dāng)且僅當(dāng)這兩個(gè)類型表達(dá)式的名字完全相同 在名字等價(jià)下,上例中, next和 last有相同的類型( link) ,而 p, q, r有相同的類型( pointer(cell)) ? 與 結(jié)構(gòu)等價(jià)的不同 ? 在結(jié)構(gòu)等價(jià)中,類型名字由它們定義的類型表達(dá)式代替,當(dāng)所有的名字替換后,兩個(gè)類型表達(dá)式變成結(jié)構(gòu)等價(jià)的類型表達(dá)式,則它們結(jié)構(gòu)等價(jià) ? 如果類型沒(méi)有顯式地與一個(gè)名字關(guān)聯(lián) ? 為這類類型每個(gè)隱式地建立一個(gè)唯一的類型名 此時(shí),上例中, q, r有相同的類型( nqr), 而 p與 q有不同的類型( np) 40 June 5, 2023 類型表達(dá)式的等價(jià)( 7) ? 類型表達(dá)式的兩種等價(jià)的比較 ? 名字等價(jià)的缺點(diǎn) ? 每個(gè)賦值語(yǔ)句中的每個(gè)對(duì)象必須有一個(gè)類型名,不允許有匿名類型 ? 作為參數(shù)傳遞的數(shù)據(jù)對(duì)象類型,不允許在子程序中再次定義,需要全局類型定義 ? 結(jié)構(gòu)等價(jià)的缺點(diǎn) ? 兩個(gè)類型結(jié)構(gòu)等價(jià)的確切定義:如果兩個(gè)結(jié)構(gòu)等價(jià)的結(jié)構(gòu)類型中各個(gè)域的名字必須相同嗎?域的順序? ? 程序員聲明的兩個(gè)變量有不同的類型,但它們可能在結(jié)構(gòu)上是等價(jià)的,靜態(tài)檢查可能無(wú)法發(fā)現(xiàn)一些類型不相容的操作等錯(cuò)誤 ? 判斷算法開(kāi)銷比較大 41 June 5, 2023 類型表達(dá)式的等價(jià)( 8) ? 名字等價(jià)的測(cè)試,兩個(gè)類型表達(dá)式 s和 t function sequiv( s , t ) : boolean。 begin if s和 t是相同的基本類型 then return true else if s 和 t 是類型名 then return s = t else return false end ? 名字等價(jià)的測(cè)試也可以通過(guò)構(gòu)造類型圖來(lái)實(shí)現(xiàn) ? 每當(dāng)看見(jiàn)類型構(gòu)造器或基本類型對(duì)應(yīng),構(gòu)造一個(gè)新的結(jié)點(diǎn) ? 每看見(jiàn)一個(gè)新的類型名,就構(gòu)造一個(gè)葉結(jié)點(diǎn) ? 記錄名字引用的是哪個(gè)類型表達(dá)式 cellp o i n t e r p o i n t e rp o i n t e rl i n k =next last p q r42 June 5, 2023 類型表達(dá)式的等價(jià)( 9) ? 類型表示中的環(huán) ? 類型的遞歸定義 ? 如鏈表、樹(shù)等,在類型定義中要引用自身 ? 類型名起重要的作用 ? 例子: struct cell { int info。 struct cell *next。 } 43 June 5, 2023 類型表達(dá)式的等價(jià)( 10) ? 當(dāng)碰到記錄構(gòu)造器時(shí),結(jié)構(gòu)等價(jià)的測(cè)試停止,被比較的類型或者由于它們有同樣的命名記錄類型而等價(jià),或者不等價(jià) c e l l = s t r u c ti n t e g e rinfonext p o i n t e rcellc e l l = s t r u c ti n t e g e rinfonext p o i n t e r44 June 5, 2023 函數(shù)和算符的重載( 1) ? 重載符號(hào) ? 含義的確定:依賴于上下文 ? 算術(shù)算符的重載:大多數(shù)語(yǔ)言中算術(shù)算符是重載的 ? 2+3,整型加法 ? 2+,實(shí)型加法 ? 在 FORTRAN90中,如果有 real A(100), B(100),
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1