編譯原理學霸筆記
『壹』 編譯原理筆記9:語法分析樹、語法樹、二義性的消除
語法分析樹和語法樹不是一種東西 。習慣上,我們把前者叫做「具體語法樹」,其能夠體現推導的過程;後者叫做「抽象語法樹」,其不體現過程,只關心最後的結果。
語法分析樹是語言推導過程的圖形化表示方法。這種表示方法反映了語言的實質以及語言的推導過程。
定義:對於 CFG G 的句型,分析樹被定義為具有下述性質的一棵樹:
推導,有最左推導和最右推導,這兩種推導方式在推導過程中的分析樹可能不同,但因最終得到的句子是相同的,所以最終的分析樹是一樣的。
分析樹能反映句型的推導過程,也能反映句型的結構。然而實際上,我們往往不關心推導的過程,而只關心推導的結果。因此,我們要對 分析樹 進行改造,得到 語法樹 。語法樹中全是終結符,沒有非終結符。而且語法樹中沒有括弧
定義:
說白了,語法樹這玩意,就一句話: 葉子全是操作數,內部全是操作符 ,樹里沒有非終結符也不能有括弧。
語法樹要表達的東西,是操作符(運算)作用於操作數(運算對象)
舉倆例子吧:
【例】: -(id+id) 的語法樹:
【例】:-id+id 的語法樹:
顯然,我們從上面這兩個語法樹中,直接就能觀察出來它們的運算順序。
【例】:句型 if C then s1 else s2
二義性問題:一個句子可能對應多於一棵語法樹。
【例】: 設文法 G: E → E+E | E*E | (E) | -E | id
則,句子 id+id*id、id+id+id 可能的分析樹有:
在該例中,雖然 id+id+id 的 「+」 的結合性無論左右都不會影響結果。但萬一,萬一「+」的含義變成了「減法」,那麼左結合和右結合就會引起很大的問題了。
我們在這里講的「二義性」的「義」並非語義——我們現在在學習的內容是「語法分析器」,尚未到需要研究語言背後含義的階段。
我們現在講的「二義性」指的是一個句子對應多種分析樹。
二義性的體現,是文法對同一句子有不止一棵分析樹。這種問題由【句子產生過程中的某些推導有多於一種選擇】引起。懸空 else 問題就可以很好地體現這種【超過一種選擇】帶來的二義性問題,示例如下。
看下面這么個例子。。
(其實,我感覺這個其實比較像是「說話大喘氣」帶來的理解歧義問題。。。)上面的產生式中並沒體現出來該咋算分一塊,所以兩種完全不同的句子結構都是合法的。
二義性問題是有救的,大概有以下這三種辦法:
這些辦法的核心,其實都是將優先順序和結合性說明白。
核心:把優先順序和結合性說明白
既然要說明白,那就不能讓一個非終結符可以直接在當次推導中能推出會帶來優先順序和結合性歧義的東西。(對分析樹的一個內部節點,不會有出現在其下面的分支是相同的非終結符的情況。如果有得選,那就有得歧義了。沒得選才能確定地一路走到黑)
改寫為非二義文法的二義文法大概有下面這幾個特點:
改寫的關鍵步驟:
【例】改寫下面的二義文法為非二義文法。圖右側是要達成的優先順序和結合性
改寫的核心其實就兩句話:
所以能夠得到非終結符與運算的對應關系(因為不同的運算有不同的優先順序,我們想要引入多個優先順序就要引入多個新的非終結符。這樣每個非終結符就可以負責一個優先順序的運算符號,也就是說新的非終結符是與運算有關系的了。因此這里搞出來了「對應關系」四個字)如下:
優先順序由低到高分別是 +、 、-,而距離開始符號越近,優先順序越低。因此在這里的排序也可以+ -順序。每個符號對應一層的非終結符。根據所需要的結合性,則可確定是左遞歸還是右遞歸,以確定新的產生式長什麼樣子
【例】:規定優先順序和結合性,寫出改寫的非二義文法
我們已經掌握了一種叫做【改寫】的工具,能讓我們消除二義性。接下來我們就要用這個工具來嘗試搞搞懸空 else 問題!
懸空 else 問題出現的原因是 then 數量多於 else,讓 else 有多個可以結合的 then。在二義文法中,由於選哪兩個 then、else 配對都可以,故會引起出現二義的情況。在這里,我們規定 else 右結合,即與左邊最靠近的 then 結合。
為改寫此文法,可以將 S 分為完全匹配(MS)和不完全匹配(UMS)兩類。在 MS 中體現 then、else 個數相等即匹配且右結合;在UMS 中 then、else 不匹配,體現 else 右結合。
【例】:用改寫後的文法寫一個條件語句
經過檢查,無法再根據文法寫出其他分析樹,故已經消除了二義性
雖然二義文法會導致二義性,但是其並非一無是處。其有兩個顯著的優點:
在 Yacc 中,我們可以直接指定優先順序、結合性而無需自己重寫文法。
left 表示左結合,right 表示右結合。越往下的算符優先順序越高。
嗯就這么簡單。。。
我們其實可以把語言本身定義成沒有優先順序和結合性的。。然後所有的優先、結合都交由括弧進行控制,哪個先算就加括弧。把一個過程的結束用明確的標志標記出來。
比如在 Ada 中:
在 Pascal 中,給表達式加括弧:
『貳』 編譯原理這門課難不,介紹下啊,我沒上課但要考試啊。。。。。
如果您覺得有用的話,請及時採納我的答案,謝謝。
我認為這門課不難,好好學吧,把同學的筆記接來看看,如果只求過的話,我相信努力幾天還是沒問題的。編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。
這門課的基本概念:編譯器是將一種語言翻譯為另一種語言的計算機程序。編譯器將源程序(source language) 編寫的程序作為輸入,而產生用目標語言(target language )編寫的等價程序。通常地,源程序為高級語言(high-level language ),如C或C + + ,而目標語言則是目標機器的目標代碼 (object code,有時也稱作機器代碼(machine code )),也就是寫在計算機機器指令中的用於運行的代碼。這一過程可以表示為:源程序→編譯器 →目標程序
『叄』 求復旦大學歷年考試題和專業筆記
《復旦大學|2015復旦初試真題|2014復旦初試真題》網路網盤資源免費下載
鏈接: https://pan..com/s/1oiTAuDQNZjmpJVf38BCcUA
復旦大學|2015復旦初試真題|2014復旦初試真題|2013復旦初試真題|13復旦哲學綜合+西方哲學+馬哲真題.pdf|13復旦英語語言文學回憶版.pdf|13復旦遺傳學回憶版.pdf|13復旦新聞學院傳播學考研真題.pdf|13復旦生命科學學院生化和細胞考研真題回憶版.pdf|13復旦國際商務考研真題回憶版.pdf|13復旦法學院839法理學真題(回憶版).pdf|13復旦法學概論+訴訟法真題回憶版.pdf|13復旦法概和民商法真題回憶版.pdf|13復旦大學稅務專業課真題回憶版.pdf|13復旦大學比較文學真題回憶.pdf
『肆』 讀書活動個人讀書方法總結
讀書活動個人讀書方法總結
書是智慧的翅膀,書是我們人類最寶貴的財富。在學校組織的營造書香校園系列活動中,為了給學生營造一個書香環境,為了讓每一個孩子都與書交朋友,為了激發他們讀書的興趣,讓他們想讀書、愛讀書、會讀書,從小養成熱愛書籍、博覽群書的好習慣,我班主要做了以下系列工作:
一、閱讀時間,得到保證
1.每兩周安排一節課外閱讀指導課,主要是利用早讀進行必要的指導。
3.回家後學生自主閱讀40分鍾,並做好讀書筆記。基本上每周兩次摘記。
二、為學生提供了閱讀交流和展示的平台
1.生生共讀。每天利用課余時間最少進行四十分鍾的閱讀,並進行讀書心得交流。
2.師生共讀。從老師自身做起,以身作則,每天做到和同學們一起讀書。師生同讀一本書,在班上講故事相互交流。
3.教給學生掌握幾種常見的閱讀方法:一是精讀法,要求每分鍾讀200字以上,理解率在90%以上;二是略讀法,要求每分鍾讀200~400字之間,理解率在80%左右;三是快讀法,能一目十行法,要求每分鍾讀400字以上,理解率達到70%。
4.指導學生針對性的閱讀。
(1)告訴學生讀書要在心中有個自讀提綱:比如①看見了題目你想到些什麼②讀後你知道了什麼還想知道些什麼③你還有哪些不明白的問題要求學生做到眼到心到。
(2)然後重點強化「不動筆墨不讀書」的方法:①圈點勾畫。即用相關的符號在書上記錄下自己閱讀時的見解、感受。②做批註。即在文章旁邊寫出自己的見解和感受。
5.布置實踐性作業,鍛煉實踐能力。為了檢查學生的閱讀質量,開展相應的活動。如利用讀書卡開展「向你推薦一本好書」、「讀書心得」等內容,讓學生聯系實際談讀書心得,大家一起進步。通過讀書筆記、手抄報讓學生展示從課外閱讀中獲取的知識。
三、閱讀內容,得到落實
1、發揮班級讀書角的作用。鼓勵每位學生從家裡拿五本書來,和學生交換看,豐富讀書資源。
2、利用好語文同步閱讀。和課文配套的同步閱讀我們都要求學生能閱讀好。
3、利用好校本教材《國學》,進行經典閱讀。
有付出必有收獲。一學年來,學生讀書並沒有多少可供量化的成果,但從很多學生的寫作水平的逐步提高就可見端倪了。雨果說:「書籍是改造靈魂的工具。」確實好書就如同是好的生活教科書,它能夠教人怎樣做一個正直的人。我相信,隨著時間的推移,只要學生能在老師的引導下,變得熱愛讀書了,變得喜歡思考了,學會怎樣做人了,就是他們讀書後最大的收獲。
個人讀書方法總結2
不過看這個的前提是:每個人的讀書習慣都是不同的,不要隨便「全盤」拿別人的習慣來培養自己的習慣,找到合適自己的才是最重要的。「全盤」二字重點,不要全盤接受別人的習慣。我下面所說的也不一定是讀到我文章的人所需要的。
我的讀書方法,一些是我爸爸培養的,一些是我以後總結的。
1、挑選合適的時間連續閱讀。
我也一樣不推薦計劃閱讀。看了Jun Yang的文章,在這一點有些共鳴。
C專家編程的作者Peter Van Der Linden曾經玩笑的解釋「什麼時候數組與指針相同」這個標題的時候說:
The C Programming Language,第二版(K&R)99頁的底部是:
作為函數定義的形式參數,
然後翻到第100頁,緊接前一句,
char s[]和char* s是一樣的。
嗚呼,真是不幸,這么重要的一句話竟然在K&R第二版種被分別印在兩頁上。
嗯,如果按計劃看這樣的書,恰巧看到99頁,而不看100頁,那麼100頁的關鍵部位豈不是看不到?呵呵,玩笑。
畢竟連續閱讀頭腦才有印象。看書不是鍛煉,看書不是鍛煉記憶力,獲取書本知識不能「量化」。
2、快速瀏覽,然後多看幾遍。
這個是我爸爸在我小時候就給我提的,我接受了這個建議到現在。他給我說:書你一遍看完就掌握其中重要的內容是不現實的。但是在掌握之前要有個大概的印象,掌握這個印象的方法就是快速瀏覽,不要知道某些條目是為什麼,需要研究的重點就記下來,第二次看的時候再去仔細看,能理解多少就是多少,第一次要以看完為目的。而真正掌握,是隨後的通讀,有了第一遍的基礎,隨著看這本書的次數增加,看書速度會越來越快,因為頭腦里早已經知道那些是沒有掌握的,已經掌握的就會快速略過,但是會加深印象。此後可以帶著實際問題從新來翻閱該書,會有更深的理解。《C++Primer第三版》潘愛民老師翻譯的版本,我在2002年購買到現在看了不知道多少遍了。從最初的花了近3個月的瀏覽第一遍,到現在的可以花一天就可以通讀一遍。期間給我帶來了不少好處。
曾經非常非常不待見這種方法,自從親身使用過好感到確實是好方法。特別是一些技術書籍,盡管你第一遍看的很仔細,你仍然不能記住對你來說第一次接觸到的概念,讀多了(可能跟艾賓浩斯曲線有關吧),記住的概念多了,也就更好理解了。
3、學會記憶也要學會忘記。
記住重點,盡量忘記細節。甚至記住哪本書可以找到這個概念就夠了,然後忘記它。每個人對待書的態度不同的,或許與自己的成長經歷有關。我的習慣是,記住重點,想了解細節再去查。學會記住很難,其實學會忘記也很難。有時候記憶是一種負擔,日積月累會很沉重,不用的知識會越來越多,而且書承載的是作者他的想法,看書在吸收知識的時候,無形中也在被作者所「干涉」思想。但模仿的過程是學習的重要過程,但脫離不了模仿就不能成為自己的思想和知識。學會查是一種重要的手段,還是《C++Primer》,前幾天我還就構造函數和析構函數的細節,特別對多繼承的析構函數作為重點仔細看了一下,有時候一些類似常用的概念,有很多種形式,平時也就用最常用的,那些不常用換言之特殊的概念,能查就可以了。嗯,看了Jun Yang的第二點,他說「知識存儲機器」,呵呵有些誇張了。不過也可以理解他這么說,上面我已經提到書本給我們帶來的負面影響了。
「看書」而不是「讀書」,讀書也是中國常用詞語。英語就是read book。很多人都喜歡用嘴去「讀」書,或者邊看書邊自言自語。這是不太好的一個習慣,讀是一種干擾人思維的方式。語言雖然能加深記憶,但會影響思考。
4、不要「太」強迫自己。
不喜歡就不要看,看不進去可以極端的選擇乾脆不看,或者隔一段時間再看,或者靜下心來的時候再看,或者換一本同類的書,按照自己需要的知識點來尋找書籍。曾經和朋友交流過,他說《編譯原理》也就是那本經典的「龍書」,雖然他也知道很好,可怎麼也看不進去,不知道為什麼。但是看《編譯原理與實踐》,他很容易的就看進去了,之後,他根據掌握的編譯原理寫了一個匯編語言的代碼著色器,可以生成UBB代碼和HTML代碼。
我為什麼要突出不要「太」強迫自己這個「太」呢?有時候也需要強迫一下自己,不能太隨性,也得掌握一個度。有時候很重要的概念書籍,看起來是很枯燥的,朋友建議看的書,可能有他受益過的地方。比如我看《Structure and Interpretation
of Computer Programs(SICP)》,就是那位只能看《編譯原理與實踐》的朋友推薦我看的,北大裘宗燕老師已經翻譯為中文版。經典的SICP是用Lisp描述的,一本古老的介紹functional編程的書。看一點就感覺很乏味,但稍微強迫一下自己,就知道這本書的優異之處。我就是看了求解費波那契數列的使用遞歸,以及遞歸優化那一章,對我以後寫任何語言遞歸的分析,受益那是一輩子的。比如C++之父寫的書,就被公認的哲學味太濃,不適合絕大多數人閱讀,但我就很喜歡看,書本就是這樣,因人而宜,就像配偶一樣,自然有適合自己的一位。
5、有時候需要追根溯源一下,有時候需要換一種角度來看書。
下面是來自:Bejarne Stroustrup在《C++語言的設計與演化》裡面有關「引用」這個概念的提出時候的細節,更多的描述見該書裘宗燕老師翻譯的版本第56頁和第57頁:
引入引用機制主要也是為了支持運算符的重載。Doug McIlroy還記的,有一次我向他解釋某個預示了目前運算符重載模式的問題。他用的術語引用挑起了我的思緒,我嘟囔了一聲謝謝就離開了他的辦公室。當我第二天再出現時就帶著已經基本完成的目前模式。Doug使我想起了Algol 68。
現在引用機製得到了大家認可,一些崇尚C語言高效,但有些抵制C++的牛人們也稱贊了它,這是C++優於C的地方。這里不是討論語言的,關於這些我就不再多說了。自從我看了這一段話之後,我頭腦中所記憶的引用的概念就是「為了支持重載運算符而添加的機制」。嗯,現在可以在很多書或者文章里找到解釋這個引用字眼,引用也不僅僅只用在「重載運算符」上。不過追根溯源看了重載運算符這里,什麼時候該用指針,什麼時候該用引用,我自認為寫的代碼里用的還算合適。中國人非常喜歡對某個知識追根溯源,如果時間允許的話這是好事,從源頭找起,更有助於加深理解。
6、做筆記只是手段而不是最終目的,總結為自己的思想才是最重要的。
看書的最終目的,就是吸收書本知識,成為自己的思想。我個人不喜歡做筆記,我也不喜歡批註,我就喜歡一遍遍的看書。但記住,這是我個人的喜好而已,我父親40歲之前看書就喜歡做讀書筆記,而且很喜歡用沒有條格的速寫本做筆記,但是現在年齡大了看書多反而不去做筆記,喜歡小批註。喜歡做筆記的人,一般是喜歡把自己想要知道的重點記錄下來,可以省卻再次閱讀書本的時間。或者用紙張記錄自己的觀點,給自己做自我總結。這是好習慣,但是我自己就是不喜歡,哈哈:)。我喜歡用我頭腦需要的概念在頭腦中總結,哪怕挑重點的再把這本書看兩遍。以前研究COM的時候做過一段時間的筆記,後來逐漸就放棄了。
7、看到好書後不能讀死書,更不能信奉為「天書」。
看書後不能白看,多多的反思自己,然後有批評的眼光看待這本書,看待自己甚至別人的觀點或者代碼。很早就感悟到「適度」的重要性,盡量不走極端,包括批評本身。但不知不覺就會慢慢走向極端,這時需要適度的修正自己,應用書本的知識。我聽到過許多別人的話,比如C/C++已經過時,JAVA才是最先進的,或者C#有多麼多麼先進,或者UNIX哲學一派,面向對象就是些花哨的東西C語言就足夠用了。這類極端的話有些是自己想的,但絕大多數是人雲亦雲的跟風和受書本的影響。說JAVA先進的,我會問他,你能用JAVA寫操作系統嘛?說面向對象花哨的,我會拿出一些C語言很不容易編寫的方面給他看,比如3D游戲。聽到我的話這些人會閉嘴的,總有長處和短處存在。知其然,知其所以然。
8、書面知識是死的,實際應用才是活的,根據自己的需要,活用參考書。
有些書涉及的知識面很廣,比如參考書,通讀真的很難。如果條件允許的話,尋找一些實際的問題看書,會更好的理解。為了工作,我曾經就快速排序做過研究,也和許多朋友交流過。我帶著這個問題翻看了許多演算法書籍,包括《計算機程序設計藝術》《C演算法》《編程珠璣》之類的經典著作,也參考了許多代碼。《計算機程序設計藝術》很厚,我只取其中一章而已,這本書我沒有看完,不過裡面單獨的幾章,我看的很仔細。當然,我沒看完也沒資格給蓋茨發簡歷.
9、給自己定位,你是否適合從書本獲取知識。
我有個朋友,他幾乎不看技術書,但是他的思維很開闊,很容易理解新概念和方法,我只需要和他說一說他隨便上網看看資料就夠了。他做的系統很耐用,我也不容易挑出毛病。看書反而限制他的思維方式,這點我拍馬趕不上,我只能看看書,呵呵。所以說獲取知識並不一定只有看書,朋友們的交流,網路上的論文和資料都是很好的資源。只給自己一個定位,是不是真的適合看書才能增長你的知識。記得以前和tinyfool有過一些交流,此人就是不需要看太多書籍的.人。
10、最好能和作者交流一下。現在互聯網豐富,我們也可以通過郵件和作者交流了。
我研究快速排序的時候,曾經和Julian Bucknall,《Delphi演算法和數據結構》的作者用電子郵件交流過,他給我指出了我理解上的偏差,讓我受益匪淺。高山仰止,外加猜測理解,還不如直接去問作者。
最後,就用《論語》里的那句話來總結一下:學而不思則罔,思而不學則殆。
很贊,其中的幾個建議也是我的習慣.
此外,我在學習一個知識點的時候,心中始終抱著一個目標,就是最終要能寫出一篇很好的survey,這樣一來在閱讀思考的時候總是有意無意地在整理知識的結構,並且往深處想。我的實踐表明這是一個很棒的技巧。
在樓主的基礎上,補充幾個我自己的讀書習慣
1、在看新書的時候,就會拿幾本一起聯合著來看(而不管那其中的某一本書有多經典)。理解->總結->求交集->挑毛病->求證->結論或疑問(算是critical thinking的一種表現吧)
2、經常重復閱讀。就是說,在這次開始讀的時候,不是接著上次停掉的地方讀,而是多向前覆蓋一些,比如:一大段,幾頁,甚至前面的一整章。有時候還隨機地翻開一本書來讀,如果一旦發現找不到感覺,跟不上作者思路,就努力補充知識直到滿意。
3、先在某些人面前表現得"強大"一些,然後為了彌補自己的過度膨脹,就必須要努力加倍地讀書了……百試不爽的辦法,呵呵,從小學時就這樣幹了
我的想法是,有時候換個角度從作者的角度來思考問題,比如說作者為什麼要這么組織結構,作者是怎麼說明某個問題的,這樣思考的話,有時候會有意想不到的收獲:-)
樓主說的很對,最近在看《演算法導論》,症狀基本和你說的差不多,剛開始時雄心勃勃,但過了一陣,效率降低很多,感覺樓主好像在說我,呵呵,開玩笑了。
前一段時間,為了自己的成就感,我只讀書或者說只在意今天讀了多少頁,對於習題,做得不多或者做得不好。因為讀書的時間相對於做題來說少的多,對於《演算法導論》,你一個小時能看不少頁,但當中的習題,有的一個小時根本做不完,因為你得思考。所以讀書時的成就感大受打擊,久而久之,就只看書,不思考了。當然,但我很興奮的讀完一章之後,發現自己的收獲沒有想像中的那麼多。所以現在,自己把讀書分為兩個階段--首先,對於一章,我會不看習題,一口氣把它快速讀完,這可以提高自己的成就感;之後,我會一節一節的細讀、思考和做題,這期間自己的成就感很高(我一看完這一章了,呵呵),不過第二階段的時間不宜過長,否則自己的成就感會降的很低,所以關鍵還得靠努力。這樣用的時間或許很多,但收獲也會很多。以上兩個階段,有點像預習、讀書和復習。當然,這只針對於好書。一般的書,以增長見識為主。
個人讀書方法總結3
一、 存疑。
要帶著質疑的眼光去讀書,不被作者的觀點和思路牽著
鼻子走,任何事情都有特定的環境,任何觀點都是辯證的,任何真理都是相對的,如果不抱著懷疑的眼光去看書思考,就會越看越迷惑,就會「盡信書不如無書」,無法獲得真知。為了存疑,甚至可以強制自己對作者的觀點去攻擊一番,不把作者的觀點駁倒不放手。
二、 精選。
盡量選經典和暢銷書看,對難以讀下去的書盡快丟進垃
圾桶。
三、 系統。
最好成系統地看書,圍繞一個課題看書,在一段時間集
中看某一方面的書,通過對比、聯系、發散、總結,形成對某個問題的較深入和全面的認識;
四、 濃縮。
每看完一本書都要濃縮成摘要,對好書最好回顧,做筆
記寫心得,寫出自己的概括,貼在書前,作為自己以後復習的內容。看一本消化一本,再看其他的書,以達到書越讀越薄、能力越積越厚的目的;
五、 提綱。
但凡看一本書或者一篇文章,務必先看其目錄或結構,
並記憶揣摩這個結構,如果是一篇文章,還可以先考慮一下作者會寫一些什麼。然後再看某段下邊又寫了幾個層次,這樣從宏觀到微觀逐步領會。在讀完之後,再對自己感興趣的內容進行重讀精讀;
六、 復習。
定時對看過的書和文章進行復習。
七、 帶著問題去讀書。
;『伍』 編譯原理:小題如下,求學霸幫忙
短語:1a,2Sb,3ba,4baSb
句柄:a
直接短語:a,Sb
語法樹推導:
S=>AB
=>bBB
=>baB
=>baSb
語法樹貌似在這里粘貼不上。
『陸』 編譯原理題目:請將表達式(a-b)*(a+b/c)表示成三地址碼
t1 = a - b
t2 = b / c
t3 = a + t2
t4 = t1 * t3
『柒』 編譯原理里什麼是三地址碼
指令是由操作碼和地址碼兩部分組成.
有些指令要有3個操作數,也就是3個地址碼--三地址碼。
3地址指令:
OP A1 A2 A3
『捌』 學習編譯原理之前需要學哪些知識
1.你要學到什麼水平?是想考試考好還是想實際寫出來一個足夠強度的編譯器?如果是前者,就一句:努力當學霸才是你唯一的出路。
2.對於scanner &parser的話,對於書上所講的演算法的要求是很高的,有很大的依賴性,所以必須理解透徹,即使沒有機會實現也要自己動手畫畫。同時這也是本科階段所學的編譯原理的所有內容。雖然flex和bison很好使,但是強烈不建議使用。
3.對於生成器、連接器或者解釋器的話,那麼你要了解匯編語言、微處理器、微機介面等計算機基礎學科。簡單的說就是從底層學到高級語言的層面。這個要求是很高的,畢竟涉及到二進制代碼優化等很麻煩的。
『玖』 編譯原理的題目,給出接受在字母表{a,b}上所有以a開頭b結束的串的DFA。
boolean tag = true;
final String pattern1 = "^([a-z0-9A-Z]+[-|//.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?//.)+[a-zA-Z]{2,}$";
final Pattern pattern = Pattern.compile(pattern1);
final Matcher mat = pattern.matcher(email);
if (!mat.find()) {