上篇部落格中介紹了語言處理程式,這篇接著介紹語言處理程式編譯原理,只是個人的淺顯理解,往讀者多多指正。
一、工作流程
首先我們來梳理一下語言處理程式的工作思路:
1、語言處理程式的物件——程式語言
2、對操作物件進行逐步檢查。
3、生成目標**(以編譯程式為例)
語言處理程式需要對程式語言編寫的源程式進行操作處理。還是這張圖,包含了語言處理程式要進行的所有工作。
怎麼理解這張圖呢?為什麼要進行這些所謂的「詞法」,「語法」,「語義」等一系列的檢查呢?
這就需要看我們操作的物件的組成了。要對之進行分析,操作,變化,必須清楚其構造。
二、程式語言定義——知其構造,方能改造之。
通用語言的形成
程式語言不外乎也是這樣的邏輯,也是有基本的符號按照規則形成,單詞,形成句子……
那我們就來看看程式語言中的這些定義:
詞法
由基本字元(a,b……)構成的符號(單詞)書寫的規則
單詞拼寫是否正確
語法
由程式語言的基本符號組成程式中的各個語法成分的一組規則
關注的是句子的結構
語義
按照語法構成的各個語法成分(句子)的含義,關注的句子的含義
靜態:在編譯時期發現
動態:在執行時期發現 語用
設計語境,適不適合在這裡使用
。(一般不使用)
這樣對比發現,編譯機制中的工作流程是這麼的來的,並不是空穴來風。
三、自動機和形式語言的出現————
這裡不懂
在詞法,語法分析的過程中,是如何進行的呢?一句話,程式語言是怎麼形成的,其解析過程就是其「逆襲」的過程。
這就到了形式語言和自動機的舞台。
形式語言:按一定規律構成的句子或符號串的有限或無限的集合,是為了描述語言的一種理論模型。它只考慮語法,詞法,而不考慮語義。
在形式語言中,有字母表,有狀態集合,有從字母到字串的規則,這其中包含,文法。字母表中的字母按照文法構成句子。文法又有不同的要求等級,對應的可以構成不同的語言,例如三型文法,構成正則語言。計算機語言學中為了識別文法構成的不同,引入自動機,把自動機作為語言識別器,用來研究各種形式語言。
總之,形式語言,自動機都是編譯程式拿來檢測程式語言的工具。我們只要明白這個就夠了。
後記:這次軟考,給了我很好的學習計畫,在軟考之前,沒有想太多,只是想著要好好看書。可是當接觸到軟考教材後,發現這本書真的是把我這幾年學習計算機積累的好多問題都給解決了。例如,編譯原理,計算機組成原理,作業系統等,以前涉及到也會對應的去查,可是總是連不起來,而現在,這本書,我個人覺得,內容關,知識的難易程式拿捏的恰好,讀完之後,有一種豁然開朗的感覺。
AC自動機理解
對於ac自動機可能有的疑問。首先上 該 使用char型陣列儲存,事實上string也完全可以。includeusing namespace std char s 1000005 struct tree 字典樹 ac 1000000 trie樹 int cnt 0 trie的指標 inline voi...
暖 墟 AC自動機 AC自動機的總結與運用
kmp 匹配單串,線性掃瞄,在失配時用next陣列引導j指標回溯,進行下一步匹配。trie樹 多模式的匹配,構造26叉樹,同時記錄多個串的情況,記錄結尾,進行匹配。kmp trie樹 ac自動機 ac自動機 給乙個字典,再給乙個文字,問這個文字裡出現了字典裡的哪些字。可以用n個單詞的n次kmp演算法...
KMP演算法 基於自動機的理解
kmp 演算法學習總結 kmp 演算法看似簡單,其實想要完全理解還是有困難的。kmp 其實可以搜尋過程可以看成是乙個自動機,分為 2 部分,第一部分自動機的構造 對應一般的說法就是失效函式,轉移函式,overlap 函式 第二部分在自動機上搜尋過程。舉個例子 目標串味 t acabaabaabcac...