學習《編譯原理》完全沒有頭緒怎麼辦?陳臨2014-11-02 09:08:37

這個專欄在告訴你如何手寫一個編譯器,目前還在連載,希望對你有幫助。

從零開始寫個編譯器吧系列 - 平凡與非凡 - 知乎專欄

學習《編譯原理》完全沒有頭緒怎麼辦?周繼元2014-11-04 14:09:52

我買過很多IT的“經典書”,有的書到今天仍然沒有看懂依舊高置在書架上,有些書莫名其妙的一天因為解決一個問題就看懂了,而《編譯原理》就是我莫名其妙看懂的一本書。

前幾年幫人寫個小程式,中間有些引數需要時不時的調整,我想到了配置檔案,但是簡單的配置檔案不足以勝任,其實配置檔案一些簡單的畫圖動作,類似:

area 0 0 800 800

line 20 20 40 80

circle 5 12

image 20 20 320 240 50%

end

為了解析這個配置檔案,我想了很多辦法,最初使用文字處理函式類似split, trim, etc。搞了段時間發現問題多多,時常出錯。然後使用regular expression,勉強好點。最後發現其實可以寫個訂製的簡單parser逼格更高點,然後就去找資料,翻這本放了好幾年幾乎沒有怎麼看過的《編譯原理》,我靠,一看,原來如此。

廢話太多,其實我的意思是說,你當前如果需要解決一些文字分析,轉換的動作,能逼格高的完成,只有這條路,已經被別人嚼過了。

學習《編譯原理》完全沒有頭緒怎麼辦?RednaxelaFX2015-03-31 01:53:22

傳送門:跟沉魚姐姐一起學習龍書 fool2fish/dragon-book-exercise-answers · GitHub

學習《編譯原理》完全沒有頭緒怎麼辦?狗肉 花與果2015-08-13 09:34:53

如果你有較為豐富的程式設計尤其是彙編經驗的話

建議可以跳過前端的部分,也就是詞法語法語義這塊。

先看最佳化部分的內容,虛擬碼和數學相關的東西看不明白也可以暫時跳過,先搞清楚這個最佳化是要把什麼樣的東西最佳化成什麼樣,然後再去看這個最佳化是如何分析程式並判斷可以進行最佳化的。

一個是最佳化比較容易結合你的程式設計經驗,再一個是前端這東西其實沒必要花太多精力

學習《編譯原理》完全沒有頭緒怎麼辦?程式設計師小濤2020-04-13 18:28:52

我以前在學編譯原理的時候就感覺非常懵逼,像是在上數學課,一上來引入了一大堆定義,各種推導,結果到做實驗的時候寫詞法分析器,連狀態轉換圖都沒畫就寫完了,至於NFA->DFA,DFA的最小化更是一點都沒用到。

後面才發現編譯原理的那一大堆概念是為了自動生成詞法分析器,比方說lex/flex,寫正則就可以自動生成一個詞法分析器了,實際上如果你自己手寫詞法分析器是用不到那些概念的。

學校那麼教我估計是因為那些概念好出題。。。。

我覺得完全沒有基礎的話可以試試寫一個markdown解析器,然後生成對應的HTML,畢竟markdown語法非常簡單。

# 這是一級標題

## 這是二級標題

**這是加粗的文字**

> 這是引用的內容

即便沒有學過編譯原理也可以看出,如果句子的開頭是一個#,那就繼續往前讀,如果讀到的下一個字元不是#,那就停下來數一數剛剛讀到的#有多少個,有一個#那就生成一個

,兩個#就是h2標籤,以此類推。然後讀取後面的字元直到讀到換行符為止,把剩餘部分的內容填充到

裡。然後[# 這是一級標題]就變成了[

這是一級標題

],在寫markdown解析器的時候肯定會遇到一些問題,然後再去看編譯原理的概念,就會發現“wow,原來我寫的那個if else就是有限狀態自動機”。

我非常看重理論在實際中的用途,如果一個理論我在實際中用不到,那麼學習起來就會痛不欲生。為了好好學習我給編譯原理找了一個用處,用markdown來做PPT。眾所周知做PPT的時候排版是一個很耗時的環節,我希望可以設計一個模板然後直接敲markdown就可以自動生成PPT了,無需排版(當然生成PPT是不可以的,準確地說是生成一個長得很像PPT的HTML檔案,可以部署到Github Pages一類伺服器然後用連結就可以訪問)。

markdown語法可以和下面課件的很多地方相對應,比方說標題“LL(1)分析演算法”可以用#轉換成h1標籤來表示,藍色字型部分可以用**xx

*

*來表示,無序列表可以用- xxx來表示。

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

但是很明顯markdown的基本語法有些簡單,有些效果實現不了,比方說我想讓PPT裡的某個元素可以被點選,然後彈出一個對話方塊展示一些內容。我希望在markdown裡寫一句

##這句話可以被點選@click(alert(“哈哈哈”))

就可以實現上面的需求,這樣就需要擴充套件markdown語法了,然後生成的HTML是:

這句話可以被點選

這樣就是編譯原理的一個很簡單的應用,當然這件事我沒有繼續做下去,因為後面發現了nodePPT。。。

回到正題學習編譯原理沒有頭緒我覺得可以先動動手感覺一下編譯原理的用途,然後再去看概念會好一些。編譯原理要透過考試的話推薦國防科技大學的課程

編譯原理(國防科技大學/NUDT)

如果要動手的話推薦中科大的課程

編譯原理 - 網易雲課堂

至於看書我是看不下去,龍書扔在角落吃灰了,啃不動,太慘了。。。