基礎知識
翻譯程序(三種):
編譯程序 高級程序設計語言->機器語言
彙編程序 彙編語言->機器語言
解釋程序 中間形式->機器語言
5+2
詞法分析 語法分析 語義分析-生成中間代碼 代碼優化 生成目標程序
錯誤處理 符號表管理
乘積(笛卡兒積): .
冪次
正閉包: .
克林閉包: .
字母表: 符號的非空有限集
符號: 字母表中的元素
符號串: 符號的有窮序列
空符號串: 無任何符號的符號串 或者 .
全集: 字母表的克林閉包
遞歸定義符號串
符號串的相等判斷、長度比較、聯接
符號串集合的乘積: .
小寫字母的s-z: 符號串
大寫字母的A-R: 符號串集合
其他: 符號
語法(推導)樹:自頂向下 or 自底向上
.
與都表示推導
擴充的BNF(巴科斯範式)表示:
.
尖括號( < > )內包含的爲必選項。
方括號( [ ] )內包含的爲可選項。
大括號( { } )內包含的爲可重複0至無數次的項。
括號 () 表示分組的意思
豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。
::= 是“被定義爲”的意思。
豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。::= 是“被定義爲”的意思。
語法圖也可以表示程序語言的語法.
注意區分以下兩種推導:
. (A可以是B本身,至少0次推導)
. (A不可是B本身,至少1次推導)
直接遞歸 間接遞歸 左遞歸 右遞歸
給定文法:
句型: $ 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 $.
無二義性文法的句子只有一棵語法樹.
最右推導和最左推導都可能會產生不同的語法樹(沒有規定優先級),導致文法的二義性.
給定文法, ,爲給文法的句型:
若, ,則u是句型w相對於U的短語
若, ,則u是句型w相對於U的簡單短語
其中.
任意句型的最左簡單短語稱爲該句型的句柄
任何句型本身一定是相對於起始符號(識別符號)的短語
一個句型只有一個句柄,可以有多個短語和簡單短語
理論上已證明: 文法的二義性是不可判定的
現在解決辦法: 提出限制條件(優先級)
有害規則: 自身推導自身,則會導致文法的二義性()
多餘規則: 始終用不到的規則(不可達)
不能推導出全部是終結符號串(不活動)
若文法中不含有以上類型的規則,則稱文法是壓縮過的
喬姆斯基 根據規則的不同,分成4類文法
0型文法: 其描述能力相當於圖靈機,可使用任何的語法描述形式.
1型文法: 其描述能力相當於線性有界自動機,上下文有關文法.(式子左面可以有多個字符,但是必須有一個終結字符)
2型文法: 其描述能力相當於下推自動機,上下文無關文法.(式子左邊只能有一個字符,而且必須是非終結字符)
3型文法(正則文法): 其描述能力相當於有限自動機,是"左線性"的.