【北航編譯原理筆記】1. 基礎知識

基礎知識

翻譯程序(三種):
編譯程序 高級程序設計語言->機器語言
彙編程序 彙編語言->機器語言
解釋程序 中間形式->機器語言

5+2
詞法分析 語法分析 語義分析-生成中間代碼 代碼優化 生成目標程序
錯誤處理 符號表管理

乘積(笛卡兒積): A2=A  AA^2 = A\ * \ A.
冪次
正閉包: A+=A1 U A2 U ... U AA^+ = A^1\ U\ A^2\ U\ ...\ U\ A^\infin.
克林閉包: A=A0 U A1 U A2 U ... U AA^* = A^0\ U\ A^1\ U\ A^2\ U\ ...\ U\ A^\infin.

字母表: 符號的非空有限集
符號: 字母表中的元素
符號串: 符號的有窮序列
空符號串: 無任何符號的符號串 A0A^0 或者 ε\varepsilon.
全集: 字母表的克林閉包

遞歸定義符號串
符號串的相等判斷、長度比較、聯接
符號串集合的乘積: AB={xy xA,yB}AB = \{xy\ | x \in A, y \in B\}.

小寫字母的s-z: 符號串
大寫字母的A-R: 符號串集合
其他: 符號

語法(推導)樹:自頂向下 or 自底向上

G=(S(),Vn(),Vt(),P())G = (S(開始符號即識別符號), V_n(非終結符號集), V_t(終結符號集), P(規則集合)).

::=::=\rightarrow都表示推導

擴充的BNF(巴科斯範式)表示:
<,>,::=,,{,},[,],(,)< , >, ::=, |, \{, \}, [, ], (, ).
尖括號( < > )內包含的爲必選項。
方括號( [ ] )內包含的爲可選項。
大括號( { } )內包含的爲可重複0至無數次的項。
括號 () 表示分組的意思
豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。
::= 是“被定義爲”的意思。

豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。::= 是“被定義爲”的意思。

語法圖也可以表示程序語言的語法.

注意區分以下兩種推導:
B  AB\ \xrightarrow{*}\ A. (A可以是B本身,至少0次推導)
B + AB\ \xrightarrow{+}\ A. (A不可是B本身,至少1次推導)

直接遞歸 間接遞歸 左遞歸 右遞歸

給定文法G[Z]G[Z]:
句型: $ Z \xrightarrow{} w, w \in V^$.
句子: $ Z \xrightarrow{} w, w \in V^_t$.
語言: L(G[Z]): $ { w\ |\ Z \xrightarrow{+} w, w \in V^*_t }$.

$ Z \xrightarrow{+} w, w \in $.

無二義性文法的句子只有一棵語法樹.
最右推導和最左推導都可能會產生不同的語法樹(沒有規定優先級),導致文法的二義性.

給定文法G[Z]G[Z], w=xuyV+w = xuy \in V^+,爲給文法的句型:
ZxUyZ \xrightarrow{*}xUy, U+uU\xrightarrow{+}u,則u是句型w相對於U的短語
ZxUyZ \xrightarrow{*}xUy, UuU\xrightarrow{}u,則u是句型w相對於U的簡單短語
其中UVn,uV+,x,yV+U \in V_n, u \in V^+, x, y \in V^+.

任意句型的最左簡單短語稱爲該句型的句柄

任何句型本身一定是相對於起始符號(識別符號)的短語
一個句型只有一個句柄,可以有多個短語和簡單短語

理論上已證明: 文法的二義性是不可判定的
現在解決辦法: 提出限制條件(優先級)

有害規則: 自身推導自身,則會導致文法的二義性(UUU\rightarrow U)
多餘規則: 始終用不到的規則(不可達)
不能推導出全部是終結符號串(不活動)
若文法中不含有以上類型的規則,則稱文法是壓縮過的

喬姆斯基 根據規則的不同,分成4類文法
0型文法: 其描述能力相當於圖靈機,可使用任何的語法描述形式.
1型文法: 其描述能力相當於線性有界自動機,上下文有關文法.(式子左面可以有多個字符,但是必須有一個終結字符)
2型文法: 其描述能力相當於下推自動機,上下文無關文法.(式子左邊只能有一個字符,而且必須是非終結字符)
3型文法(正則文法): 其描述能力相當於有限自動機,是"左線性"的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章