學習編譯原理只是研究lex和yacc嗎?

時間 2021-05-29 22:48:41

1樓:jonathan lisp

編譯器包括frontend、optimizer和backend。

lexer和parser是frontend內容。本科課時有限,講個frontend做了解。

2樓:狗肉 花與果

不是不過對於非編譯方向的絕大部分人來說大概也就前端的姿勢可以使用率比較高一點吧

雖然對於編譯來說前端只是小節大頭都在優化上

3樓:周建華

個人覺得yacc挺不錯,學會用還是很有用的。編譯後端要配合計算機體系結構和語言來才有意義,這真是要花不少精力才能入個門。當年剛入了門,課程就結束了,算是開了眼,但離掌握還很遠,後來也忘了很多。

但也養成了看spec的習慣,算是芝麻吧。

4樓:冒泡

xtlisk的專欄 - CSDN部落格

講造語言的事情,不涉及lex和yacc,很多內容和教材也不沾邊,但這也只是個人悟出來的冰山一角而已

5樓:

我也是新手,很慚愧,去年(2016)勉強算是上過編譯原理的初級課程。

我們學校 CS 426 Compiler Construction 的課程基於 LLVM,因為我上的時候教授是 Vikram Adve 。

課程主要流程結構是這樣的:

Intermediate Representations

Runtime Environments.

Intermediate Code Generation

Optimization Basics

Dataflow Analysis

Global Optimizations

Register Allocation

Instruction Scheduling

lex 和 yacc 完全沒教怎麼用,只是在寫第乙個作業的時候用到過差不多的,然後就再也沒用過了。

我們的作業主要就是編寫 Cool Language 的 Compiler。我回想一下我寫過的 MPs 啊:

好像是搭建 llvm,使用 flex 和 bison 編寫 Cool Language 的 parser。

編寫 Cool Language 的 Intermediate Code Generator。簡單來講就是編譯出 LLVM IR。

接著上乙個作業繼續寫 Code Generator。

和上面的作業沒關係了,主要是編寫和 LLVM Backend 相關的 Dataflow Optimization:LLCM(Loop-Invariant Code Motion)以及 ADCE(Aggressive Dead Code Elimination)。

編寫基於 Graph Coloring 的 Register Allocator。

所以前三個作業是編譯器前端相關的,後兩個是編譯器後端相關的。

使用 lex 以及 yacc 只是前端的一小部分而已。

編譯器也是個大坑。

結論:學習編譯原理不只是研究 lex 和 yacc。

6樓:叔本華.com

roslyn的實現就沒用到lex,一看就知道是手寫的。很多語言為了針對性優化編譯器效能,詞法分析是手寫的。所以你學編譯原理(以詞法分析為例子),不僅需要學會怎麼用lex(這太簡單了),重點是那些理論(NFA,DFA,以及為什麼這樣建模),還有理論如何實際應用(看看真實的語言的詞法分析實現),還有就是看 @vczh 的部落格,雖然已經有點歷史了,但是能了(mo)解(bai)大牛的思路啊(逃

學習計算機組成原理 編譯原理 作業系統對學習程式設計有哪些幫助呢?

雲天明 瀉藥別的先不說,編譯原理可是有大用的。僅就編譯器前端 parsing 來說,人造語言,文法,自動機這些知識在處理字串方面相當有用啊,更別說自動機這個應用很廣泛的東西了。另外parsing不僅對編譯器有用,也為通用的字串處理提供了正規化。想想正規表示式吧 另外兩個似乎沒有直接的應用,要是說僅僅...

學習《編譯原理》完全沒有頭緒怎麼辦?

我不是計算機科班出身,畢業後多年才看這本書,起初是完全看不懂的。後來發現是因為缺少前導課程,按我的理解最重要的是離散數學,集合論 代數結構 圖論都搞明白了應該可以看懂的呀。不過真的需要足夠的耐心,很多細節要仔細琢磨,認真做總結,反正以我的智力水平走馬觀花是真的看不懂。不過看懂之後真的很開心,才知道那...

如何去學習程式設計師的三大浪漫,編譯原理,圖形學,作業系統?

簡悅 我表達乙個觀點,可能對學習有用,就是簡化模型的觀點,這個思想下能做點操作性強的東西出來。至於如何簡化,以及模型是什麼,就看你的數學能力和抽像思維能力。模型可以從經典模型出發,往價效比高的商業領域或自己的實踐領域方向靠攏。如果是直接看三大領域的經典的書,而不簡化模型,直接按書實踐,這樣會很艱難。...