㈠ 誰能夠解釋下編譯原理中什麼是FIRSTVT,和LASTVT,盡量淺顯易懂點謝謝
Firstvt和Lastvt是為了畫算符優先關系表的(就是表裡面填優先大於小於等於的那個)。
然後要注意他們可都是終結符的集合。
Firstvt
找Firstvt的三條規則:如果要找A的Firstvt,A的候選式中出現:
A->a.......,即以終結符開頭,該終結符入Firstvt
A->B.......,即以非終結符開頭,該非終結符的Firstvt入A的Firstvt
A->Ba.....,即先以非終結符開頭,緊跟終結符,則終結符入Firstvt
Lastvt
找Lastvt的三條規則:如果要找A的Lastvt,A的候選式中出現:
A->.......a,即以終結符結尾,該終結符入Lastvt
A->.......B,即以非終結符結尾,該非終結符的Lastvt入A的Lastvt
A->.....aB,即先以非終結符結尾,前面是終結符,則終結符入Firstvt
㈡ 編譯原理習題,下圖為什麼a為句柄, 而不是最左面的b為句柄怎樣理解句柄定義中的最左簡單子樹中的簡
baSb的最右推導為:S->AB->ASb->bBSb->baSb
根據句柄定義:
所以a為baSb的句柄。
只有單層分支的子樹稱為簡單子樹。最左簡單子樹末端結點組成的符號串為句柄。
㈢ 編譯原理的練習題,會的幫下忙。
1、編譯方法中自底向上的語法分析演算法有:簡單優先分析演算法、算符優先分析演算法、SLR方法、LR(K)方法、LALR(K)方法,自頂向下的語法分析演算法有:遞歸子程序法、LL(K)分析算、預測分析方法。
2、詞法分析器的輸入是源程序的字元流,輸出是詞法記號流。
3、等價
4、(a|b)*(aa|bb)(a|b)*
㈣ 幫我看看下面 編譯原理 的題目: 謝謝!
23. D
24. D
25. A
26. D
27. C
28. B
29. D
30. A
31. A
32. B
33. A
34. 不太確定,蒙D
35. A
36. 不太確定,蒙A
37. D
38. C
39. D
40. 不知道
二、
A,B
A,D
C,D
A,C
A,B,D
A,B,C,D
㈤ 請教幾個有關編譯原理的習題!
答:
一
1. S -> aS | ε
2. S -> aS | Sb | ab
二
設 有字元串序列 abc, 而字元串 abc 符合是文法S.
abc 有兩種推導 ① S -> Ac, A -> bc
② S -> aB, B -> bc
有兩語法樹,二義文法
三
不好意思忘記了短語、直接短語和句柄
課本上應該有
㈥ 編譯原理及實踐的書籍目錄
譯者序
前言 1.1 為什麼要用編譯器 2
1.2 與編譯器相關的程序 3
1.3 翻譯步驟 5
1.4 編譯器中的主要數據結構 8
1.5 編譯器結構中的其他問題 10
1.6 自舉與移植 12
1.7 TINY樣本語言與編譯器 14
1.8 C-Minus:編譯器項目的一種語言 18
練習 19
注意與參考 20 2.1 掃描處理 21
2.2 正則表達式 23
2.3 有窮自動機 32
2.4 從正則表達式到DFA 45
2.5 TINY掃描程序的實現 52
2.6 利用Lex 自動生成掃描程序 57
練習 65
編程練習 67
注意與參考 67 3.1 分析過程 69
3.2 上下文無關文法 70
3.3 分析樹與抽象語法樹 77
3.4 二義性 83
3.5 擴展的表示法:EBNF和語法圖 89
3.6 上下文無關語言的形式特性 93
3.7 TINY語言的語法 97
練習 101
注意與參考 104 4.1 使用遞歸下降分析演算法進行自頂向下的分析 105
4.2 LL(1)分析 113
4.3 First集合和Follow集合 125
4.4 TINY語言的遞歸下降分析程序 136
4.5 自頂向下分析程序中的錯誤校正 137
練習 143
編程練習 146
注意與參考 148 5.1 自底向上分析概覽 151
5.2 LR(0)項的有窮自動機與LR(0)分析 153
5.3 SLR(1)分析 160
5.4 一般的LR(1)和LALR(1)分析 166
5.5 Yacc:一個LALR(1)分析程序的生成器 173
5.6 使用Yacc生成TINY分析程序 186
5.7 自底向上分析程序中的錯誤校正 188
練習 192
編程練習 195
注意與參考 197第6章 語義分析 198第7章 運行時環境 266第8章 代碼生成 305附錄A 編譯器設計方案 373附錄B 小型編譯器列表 381附錄C Tiny Machine模擬器列表 417
㈦ 編譯原理: 畫出識別如下單詞的狀態轉換圖: Char int float
(四)練習該實驗的目的和思路: 程序開始變得復雜起來,可能是大家以前編過的程序中最復雜的,但相對於 以後的程序來說還是簡單的。因此要認真把握這個過渡期的練習。程序規模 大概為 200 行及以上。通過練習,掌握對字元進行靈活處理的方法。 (五)為了能設計好程序,注意以下事情: 1.模塊設計:將程序分成合理的多個模塊(函數/類) ,每個模塊(類)做具 體的同一事情。 2.寫出(畫出)設計方案:模塊關系簡圖、流程圖、全局變數、函數介面等。 3.編程時注意編程風格:空行的使用、注釋的使用、縮進的使用等。 4.程序設計語言不限,建議使用面向對象技術及可視化編程語言,如 C++, VC,JAVA,VJ++等。
四、上交:
1.程序源代碼及可執行文件(當堂檢查/通過網路提交) ; 2.已經測試通過的測試數據 3 組(全部存在一個文本文件中,以「第一組輸 入/輸出/第二組輸入/輸出/第三組輸入/輸出」的順序存放) ; 3.實驗報告按照提供的模板填寫: (1) 功能描述:該程序具有什麼功能? (2) 演算法描述:所採用的數據結構,基本實現演算法及某些特殊過程的實 現演算法(如在處理某個問題時,你所採取的好的處理方法等)注意 此處不要簡單的將源程序抄上來。 (源程序將列印出來作為附錄) (3) 程序結構描述:函數調用格式、參數含義、返回值描述、函數功能; 另外可以附加函數之間的調用關系圖、 程序總體執行流程圖及類的 層次圖。 (4) 實驗總結:你在編程過程中花時多少?多少時間在紙上設計?多少 時間上機輸入和調試?多少時間在思考問題?遇到了哪些難題?你 是怎麼克服的?你對你的程序的評價?你的收獲有哪些? (5) 寫出上機調試時發現的問題,以及解決的過程; (6) 附上源程序(列印的)