首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
在考點e這類的轉換題目中,有一些是需要另外規納出來的,他們在某一方面具有共同的特征,如果掌握了其中一題,將可舉一反三解出其它題。
比如有以下的幾種題目就可以作以總結:
1.求偶(奇)數個a與偶(奇)數個b構成的語言的正規式
2.求能被3(4、5、或其它任意給定的n)整除的正規式的DFA
3.求不以(或以)n(n從0到9)開頭的XXXX(符號某種條件的)奇(偶數)數的正規式
以上三種類型的考題,在每一種類型中,都是有規律可循的,也都有簡便的方法可以幫助我們快速求解其正規式,進而快速確定DFA及最簡DFA。針對于這三種類型的解題思路分析,我會在另外的文章中給出。
當詞法分析器對源程序進行了詞法分析,獲得了一個個獨立的單詞符號后,編譯程序總控模塊就會調用語法分析子程序對這些單詞符號集進行語法分析,也就是:利用該文法的產生式來判斷這些單詞符號是否足以構成一個在語法上正確的程序。如果可以構成一個在語法上正確的程序,則接著作編譯下面的工作,比如:語法制導翻譯,中間代碼生成、代碼優化等工作;而如果不能構成一個在語法上正確的程序,則給出相應的錯誤提示并將錯誤信息記入對應的數據記錄中。
語法分析的規則主要基于兩種:自上而下分析和自下而上分析。自上而下分析的大致思路是:根據產生式規則,從產生式的開始符號進行推導,一直推導到可以產生當前要判斷的這個句子為止。如果推導了所有可能情況,但沒有推出這樣的句子,那么這個句子就是不符合該語言的語法規則的(產生式即定義了語言的語法規則)。
一種自上而下的分析方法:LL(1)分析法,下面,我介紹一下本章的主要常考知識點及考查角度:
1.給定一文法,要求將其改造成可以進行自上而下分析的形式。
這里面涉及到兩方面的知識點:
左遞歸的去除及公因子的提取。所謂的左遞歸是指產生式是形如:P->Pab...的形式,即:產生式右邊的第一個字符就是該產生式左邊的那個非終結符。當一個文法中有左遞歸的產生式時,是無法進行自上而下推導的,因為只要這個產生式被推導,就勢必會使這種推導過程陷入一種遞歸循環無休止推導的情形。去除左遞歸的方法是比較簡單的,其基本思路是將左遞歸通過轉化變成與之等價的右遞歸。即將形如:P->Pa|b 形式的左遞歸變成如下形式:P->bP',P'->aP'|e(注:e表示空)。提取公因子的目的是為了避免推導過程中的回溯,也就是使每一次的向下推導是唯一的,而不是有多個選擇,因為有多個選擇的話就可能出現回溯。
2.給定一文法,要求判斷其是否為LL(1)文法。判斷一個文法是否為LL(1)文法主要有兩種方法:一種是判斷文法是否二義,如果二義,則文法必定不為LL(1)(注意:此命題的否合命題不真);二是根據關于LL(1)文法成立的三個條件。顯然,第一種判斷方法效率是比較高的,但是,其只能判斷文法“不為”LL(1)的,并不能判定文法“是”LL(1)的,要判斷文法“是”LL(1)的,就得用第二種方法,但在考題中,如果要求你判斷某文法是否為LL(1)的,則該文法多半不是LL(1)的,而且此點可以很容易地用二義性來證明,這是一種?夹问健
3.給定一文法,要求構造LL(1)分析表。LL(1)分析的重點和難點內容都在其分析表的構造上,后面要講的LR分析也是,它的難點也在于其分析表的構造。構造LL(1)分析表是一個常考點,也是大分值題的可能出題點,對于普通學校而言,相比于LR分析,他們更喜歡考LL(1)。LL(1)分析表構造前,需要先弄清FIRST集和FOLLOW集的構造方法,簡單地說,FIRST集是用于求非終結符推出的產生式中的第一個終結符的,而FOLLOW集是用于求與該非終結符后緊鄰的那個終結符的。FIRST集的構造方法見編譯原理的教材,在構造的三個規則中,前兩個規則都是比較容易理解的,第三個規則看上去就有點復雜了,我們簡單地來看第三條規則,就是:當由X推出的產生式中前面若干個非終結符,其FIRST集均含有空時,就取這若干個非結符的后一個字符的FIRST集,當然,這“后一個字符”可能是終結符,也可能是非終結符,只要其FIRST集不為空就行;而當X推出的右邊全是非終結符,且這些非終結符的FIRST集全含有空時,就把空加到FIRST(X)中。FOLLOW集的構造方法很簡單,不作詳細講解了。LL(1)分析表的構造方法見教材,構造規則主要有3條。說到這里,大家應該明確分析表中的各個單元到底代表什么含義,我作一下簡單的介紹:分析表中的最頂一行,是產生式中所有的終結符;分析表中的最左一列,是產生式中所有的非終結符;而產生式中間的諸多單元格則可以存放該文法的產生式或特殊標志(比如成功和錯誤標志)。這樣的二維表格構成的單元格的含義是:當左邊的非終結符遇到最上一行中的某個終結符時應該選擇哪個產生式進行向下的推導,這個產生式就是放在對應二維坐標處的產生式。
4.給定一文法,先要求求解其LL(1)分析表,然后要求給出針對于某一個句子的具體分析過程。這個考點的第二問主要就是考查考生對預測分析程序的工作過程的理解了,預測分析程序完全是按照分析表機械工作的,針對于考生而言,要明確何時出棧,何時入棧,以及如何入棧,這些細節信息都是要通過作題掌握的,只理解而不會熟練解答是沒有用的。
5.給定一文法,要求給出其遞歸下降分析程序。遞歸下降分析的條件也是無左遞歸及不帶回溯,其構造的過程比較簡單,就是將每個非終結符處理成可以互相遞歸調用的過程體。詳細過程參照P74到P75的例子,你可以試著寫一下P76頁教材上未列出的F過程的實現。
相關推薦:推薦:2010年計算機軟件水平考試必備完美攻略北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |