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

正文內容

第六章語法制導翻譯與屬性文法(文件)

2024-11-17 14:01 上一頁面

下一頁面
 

【正文】 用翻譯模式構造自頂向下的翻譯。} E → T ? E → TR R → +T {print(‘+’)。其初始值為:=f() 引入綜合屬性 在 R結束生成 Y時復制 。 2. L屬性定義的遞歸下降翻譯法 2020/11/29 66 3. 與每個產生式對應的程序代碼的工作過程為:按照從左到右的次序,依次對產生式右部的記號、非終結符和語義動作執(zhí)行如下的動作: 1) 對帶有綜合屬性 x的符號 X,將 x的值保存在 ,并生成一個函數(shù)調用來匹配 X,然后繼續(xù)讀入下一個輸入符號; 2) 對非終結符 B,生成一個右部帶有函數(shù)調用的賦值語句 c:=B(b1,b2,…, bk),其中, b1,b2,…, bk是代表 B的繼承屬性的變量, c是代表 B的綜合屬性的變量; 3) 對于語義動作,將其代碼復制到語法分析器中,并將對屬性的引用改為對相應變量的引用。 function F:↑syntax_tree_node。 syn := T 39。(inh: ↑syntax_tree_node):↑syntax_tree_node。 → *FT 39。 inh1:=mknode(‘*’, inh, node)。 → /FT 39。 inh1:=mknode(‘/’, inh, node)。 return syn end。 node := E。 2020/11/29 70 LL(1)翻譯法 ? 預先在源文法中的相應位置上嵌入語義動作符號 (每個對應一個語義子程序 ),用于提示語法分析程序,當分析到達這些位置時應調用相應的語義子程序。 ? 遞歸子程序法隱式地使用語義棧; LL(1)分析法則用顯式的語義棧(程序自身控制對棧的操作)。{e2} ⑵ T 39。{e4} ⑷ T 39。.inh被壓入棧 {e2} {e1} T 39。.inh 2020/11/29 78 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑹ ,idx不進棧,調用{e8},調用 {e8}后,葉結點 被壓入語義棧 {e2} T 39。.inh被壓入棧 T 39。 {e4} {e3} F 2020/11/29 81 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑹ ,idy不進棧,調用{e8},調用 {e8}后,葉結點 被壓入語義棧 T 39。.inh被壓入棧 T 39。.syn被壓入棧 {e2} {e4} {e6} {e4} T 39。 ⑵ 在每個嵌入動作處引入一個標記性非終結符 (marker nonterminals)。}放在產生式 M→ε的末尾。 ? 例如,假設在某個 LL(1)文法中有一個形如A→BC的產生式, B的繼承屬性 A的繼承屬性 := f()來計算的,亦即翻譯模式可能包含如下片斷: A→{ := f()。隨 M保存在棧中的 ,也就是,亦將被放在緊靠在 B將被歸約出來的位置之下,需要的時候同樣是可用的。因為 棧中緊挨在 X1下面的地方,所以該值也可同時作為。但歸約 B2之前,無法確定其前有幾個B1,因此,無法預測。 := L ? ? := 10 B ? B1 MB2 := 。 := 。 := getdepth(,) 2020/11/29 95 L屬性定義的自底向上翻譯 (續(xù) ) 產 生 式 代 碼 段 S ? LB stack[ntop].val2 := stack[top].val2 stack[ntop].val3 := stack[top].val3 L ? ? stack[ntop].val1 := 10 B ? B1 MB2 stack[ntop].val2 := max(stack[top2].val2, stack[top].val2) stack[ntop].val3 := max(stack[top2].val3, stack[top].val3) M ? ? stack[ntop].val1 := stack[top1].val1 B ? B1 sub NB2 stack[ntop].val2:= max(stack[top3].val2, stack[top]. stack[top4].val1) stack[ntop].val3 := max(stack[top3].val3, stack[top].val3+ stack[top4].val1) N ? ? stack[ntop].val1 := stack[top2].val1 B ? text stack[ntop].val2 := getheight(stack[top1].val1,) stack[ntop].val3 := getdepth(stack[top1].val1,) 2020/11/29 96 本章小結 ? 語法分析中進行靜態(tài)語義檢查和中間代碼生成的技術稱為語法制導翻譯技術。 ? 如果不僅將語義屬性關聯(lián)到文法符號、將語義規(guī)則關聯(lián)到產生式,而且還通過將語義動作嵌入到產生式的適當位置來表達該語義動作的執(zhí)行時機,這就是翻譯模式。 。 2020/11/29 98 本章小結 ? 注釋分析樹和相應的依賴圖是屬性值的關聯(lián)關系和計算順序的表達形式,語義關系可以使用抽象語法樹表示。沒有副作用的語法制導定義又稱為屬性文法。 := disp (, )。 := 。 2020/11/29 94 L屬性定義的自底向上翻譯 (續(xù) ) 產 生 式 語 義 規(guī) 則 S ? LB := 。 := } B ? { := } B1 { := } B2 { := max(, ) } B ? { := } B1 sub { := ? } B2 { := disp (, ) := max (, )} B ? text{ := getheight(,)。當然,如果省略了 Mj,屬性在棧中的預期位置就會改變,但是分析器可以很容易地適應這種變化。 := f()} 2020/11/29 90 L屬性定義的自底向上翻譯 (續(xù) ) ? 注意,執(zhí)行 M的語義規(guī)則時, 可用的,但實際上,實現(xiàn)時會把每個非終結符 X的繼承屬性都放在堆棧中緊靠在 X將被歸約出來的位置之下。 2020/11/29 88 L屬性定義的自底向上翻譯 (續(xù) ) ? 與 M→ε相關聯(lián)的語義動作可能需要用到沒出現(xiàn)在該產生式中的文法符號的屬性。 2020/11/29 87 L屬性定義的自底向上翻譯 (續(xù) ) ⑶ 如果標記性非終結符 M取代了某個產生式 A→α{a}β中的動作 a,則按如下方式將 a修改為 a39。 ? 也能實現(xiàn)許多(但不是所有的)基于 LR(1) 文法的 L屬性定義。 {e4} {e3} 2020/11/29 83 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑷, T 39。 {e4} {e3} {e8} 2020/11/29 82 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 {e3}, T 39。 {e5} {e4} 2020/11/29 80 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑵ , /不進棧 T 39。.inh {e8} 2020/11/29 79 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 {e5}, T 39。.inh 2020/11/29 77 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑶ ,*不進棧 {e2} T 39。 2020/11/29 75 語義棧 語法棧 3*x/y 輸入串 例 對輸入串 3*x/y的翻譯 語法分析動作和語義操作 ⑺ ,num3不進棧,調用 {e9},調用 {e9}后,葉結點 {e2} {e1} {e9} T 39。{e4} ⑶ T 39。 2020/11/29 72 例 ? 對于圖 ,設置兩個棧,一個是分析棧,一個是語義棧。 2020/11/29 71 LL(1)翻譯法 ? 與遞歸子程序法的區(qū)別與聯(lián)系 ? 都是在掃描過程中進行產生式的推導,同時在適當?shù)牡胤郊尤胝Z義動作。 node := mkleaf(id, ) end else if lookahead = num then begin /* 匹配產生式 F → num */ match(num)。 var node: ↑syntax_tree_node。(inh1)。 match(‘/’)。(inh1)。 match(‘*’)。 oplexeme:char。 return syn end。 var node, syn: ↑syntax_tree_node。 function T 39。 2.在函數(shù) A的過程體中,不僅要進行語法分析,而且要處理相應的語義屬性。 ? 消除左遞歸后,文法轉換成 A→X R R→Y R|ε S屬性定義的左遞歸消除 2020/11/29 62 ? 再考慮語義動作,翻譯模式變?yōu)椋? A→X { R?i:=f(X?x)} R { A?a:=R?s} R→Y { R1?i:=g(R?i,Y?y)} R1 { R?s:=R1?s} R→ε { R?s:=R?i} 經過轉換的翻譯模式使用 R的繼承屬性 i和綜合屬性 s。 對于自頂向下語法分析,
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1