最近由於要評職稱,準備參加軟件設計師的考試,爲了更好的記憶,也爲了方便查閱,把複習的過程記錄下來。具體的內容就不按順序寫,按照本人的薄弱環節來展開。
1,編譯程序和解釋程序的區別
編譯程序:定義(直接執行源程序,或翻譯成中間代碼後執行),在編譯方式下,機器上運行的是與源程序等價的目標程序,源程序和編譯程序不參與目標程序的執行。生成獨立的目標程序。如.java生成.class.
解釋程序:定義(源程序翻譯成目標程序,然後執行)在解釋方式下,源程序和解釋程序參與到程序的運行。程序的控制權在解釋程序。如asp.Python
另外匯編程序(三類):指令語句,僞指令,宏。彙編程序工作通常要對源程序進行兩次掃描才能完成。第一次掃描主要工作是定義符號的值。第二次掃描的目的則是產生目標程序。
2,幾種高級語言
Fortran(科學計算),Algol60(分程序結構),Cobol(事務處理),Pascal(結構化程序設計),Prolog(邏輯型語言),LISP(函數型程序)
3,編譯過程
過程階段 |
任務及其特點 |
詞法分析階段 |
該階段的任務是從左到右逐個字符的讀入源程序,識別出一個個的單詞符號。 詞法分析所依據的是語言的詞法規則,即描述單詞結構的規則。詞法規則可用3型文法(正規文法)或正規式來描述,有限自動機能識別正規文法所定義的語言和正規式所表示的集合。 |
語法分析階段 |
該階段任務是在詞法分析的基礎上將單詞符號序列分解成各類語法單元。 語法分析所依據的是語言的語法規則,即描述程序結構的規則。語法分析有自頂向下分析(遞歸子程序分析法LL1,必須改寫文法,採用預測分析法,要消除左遞歸和提取公共左因)和自底向上分析(LR和算符優先分析,後進先出棧)兩大類。 |
語義分析階段 |
審查源程序有無語義錯誤,爲代碼生成階段收集類型信息。 |
中間代碼生成階段 |
在進行了上述的語法分析和語義分析階段的工作之後,有的編譯程序將源程序變成一種內部表示形式,這種內部表示形式叫做中間語言或中間代碼。所謂“中間代碼”是一種簡單、含義明確的記號系統。 |
代碼優化階段 |
該階段是對前階段產生的中間代碼進行變換改造,目的是使生成的目標代碼更爲高級,即省時間和省空間。優化所依據的原則是程序的等價變換規則。 |
目標代碼生成階段 |
此階段使把中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或彙編指令代碼。 |
4,文法及語言形式描述
文法的定義:描述語言的語法結構的形式規則稱爲文法。
文法G是一個四元組,可表示爲G(VN,VT,P, S)。
VT是一個非空有限集,每個元素稱爲終結符。
VN是一個非空有限集,每個元素稱爲非終結符。
S是一個非終結符,稱爲開始符號;它至少要在一條產生式中作爲左部出現。
T是一個產生式集合(有限)。主要涉及幾個概念。
I. 直接推導與推導(區別是否直接導出)
II. 直接歸約與歸約(直接推導和推導的逆過程)
III. 句型和句子(由開始符號推導出的稱爲句型,僅含終結符的句型稱爲句子)
IV. 語言(句子的全體)
文法的分類:
文法類型 |
文法名稱 |
語言名稱 |
對應的自動機 |
定義 |
0型(PSG) |
短語文法 |
遞歸可枚舉語言 |
圖靈機(Turing) |
Vn中a至少含有一個非終結符 |
1型(CSG) |
上下文有關文法 |
上下文有關語言 |
線性界限自動機 |
|a|<=|b| |
2型(CFG) |
上下文無關文法 |
上下文無關語言 |
非確定下推自動機 |
a都爲非終結符 |
3型 |
右線性文法(正規文法) |
有限狀態文法 |
有限狀態自動機 |
滿足左線性或右線性規則 |
5,詞法分析
分爲確定的有限自動機(DFA)和不確定的有限自動機(NFA).
DFA定義爲(S,Σ,f,s0,z)
S爲一個有限集,每個元素爲一個狀態。
Σ爲輸入字符。
f 爲單值部分映像
S0開始狀態。
z 非空的終態集合。
NFA也是一個五元組。不過f的後繼狀態是不確定的,有向弧的標記可以是的ε。與DFA最根本的區別是,S在DFA只是一個狀態,而NFA中爲一個開始狀態集。
NFA轉化在DFA?
上圖轉化爲一個表格
I | I0 | I1 |
{S,1,2,3} | {1,3,4,5,z} | {2,3} |
{1,3,4,5,z} | {1,3,4,5,6,z} | ε |
{2,3} | {4,5,z} | {2,3} |
{1,3,4,5,6,z} | {1,3,4,5,6,z} | {5,z} |
{4,5,z} | {6} | ε |
{6} | ε | {5,z} |
{5,z} | {6} | ε |
正則式與有限自動機的轉換
定義:
6,語法分析
語法分析的任務是識別由詞法分析給出的單詞符號序列是否爲給定文法的正確句子(程序)。語法規則可以採用上下文無關方法進行描述,
上下文無關文法,語法推導樹:
語法分析常用的方法有兩類:
◆自底向上分析方法(LR分析法和算符優先分析法)
也稱爲移進-歸約分析法。對“可歸約串”刻畫的不同,形成兩種不同的分析方法,即規範歸約分析法和算符優先分析法。
◆自頂向下分析方法
也稱爲面向目標的分析方法。存在兩種分析方法,遞歸子程序法和預測分析法,都使用LL(1)文法來進行語法分析。
算符優先:
文法優先級:
例子:
fristvt,fastvt如下:
結果如下:
最後填表。
參考:
1,軟設教程(第三修訂版)
2,中國軟考聯盟
3,希賽視頻