編譯原理 文法與語言

2021-10-03 13:52:16 字數 2435 閱讀 5263

作者注:

這是一篇大學生寫的編譯原理系列,文章並非提供令人望而卻步的長篇論述,意在用簡單有趣的方式分享我所學到的knowledge。至於你所感興趣的深層論述這裡盡可能會給你提供一些簡單的連線供你使用。

這裡我要十分感謝我的周老師,我的編譯原理知識,她無疑是最大的貢獻者。二、語法樹與二義性

1.1、如何理解文法?

文法是什麼?編譯原理是針對語言的一門學科,語言的背後人們人為的凝練出的結構叫語法。對於乙個英語句子來說,當你掌握英語語法,知道單詞意思,你就可以理解這個句子。語法比較容易理解,就是語言句子的規則。同理文法的解釋就是:描述語言的語法結構的形式規則(即語法規則)。用我老師的話來說:解決語言的有窮說明問題,包含對語法的描述,但卻不表達任何語義。

1.2、文法的使用

先介紹乙個例子:

題目1:證明(i*i+i)是文法g[e]: e -> i | e+e | e*e | (e) 的乙個句子。

證明:e => (e) => (e+e)=> (e*e+e)=> (i*e+e)=> (i*i+e) =>(i*i+i)

仔細觀察就不難發現,下面的推到式所用的規則就是 e -> i | e+e | e*e(e)

這一部分,這一部分可以解讀為,e可以推導出 i 或 e+e 或 e*e 或 (e) 。

下面來自行推導一下下面這個例子:

題目2:證明句子i*(i+i)是文法g:e -> e+e | e*e | (e) | i 的乙個句子。

答案:e=>…

文法的形式是乙個四元式,開始符號、生產式、非終結符、終結符;簡單認識就是,g[e]: e -> i | e+e | e*e | (e) 叫做文法,(i*i+i)叫做句子通常用多個小寫字母+運算子表示,像i這樣的小寫字母還叫終結符號,那非終結符就是並非作為句子的符號了。e為開始符通常用乙個大寫字母表示,開始符推導到(i*i+i)句子中間的(e) , (e+e) , (e*e+e) , (i*e+e) , (i*i+e) 叫做句型,文法g產生的所有句子的全體式乙個語言。像 e->i 這樣文法中推導用的式子就叫生產式。注意=>變換過程只能變換一步。

細心的你可能會注意到題目2的推導方法有兩個。分類來說,推導方式一就是最左推導,推導方式二就是最右推導,區別很簡單,最左推導就是從左邊開始靠近推導目標句子,右推導同理。

1.3、文法分類

chomsky於2023年建立形式語言體系,他把文法分成四種型別:0,1,2,3型。

0型(又叫短語文法):

產生式形如: $ -> ¥

其中:$且至少含有乙個非終結符(確保能推導)

1型(上下文有關文法):

產生式形如:a -> ¥

其中:|$| <= |¥|,限制長度

2型(上下文無關文法):

產生式形如:a -> ¥

其中:a全是非終結符,限制左邊a全是非終結符

3型(正規文法):

產生式形如: a -> ¥b

其中: ¥全是終結符;a,b全是非終結符

產生式形如: a -> b¥

其中: ¥全是終結符;a,b全是非終結符

0到3型,逐漸增加限制,因此確定的語言依次縮小,就如同下面的圖形一樣,外面的文法可與表示裡面的文法所描述的語言。

2.1、語法樹

使用語法樹目的是為了理解句子的語法,得到句子如何從開始符號推導得到,因此引入「圖」。

注意:一棵語法樹是不同推導過程的共性抽象

2.2、二義性

我們要了解,二義性是用來修飾文法的,如果乙個文法存在乙個具有兩顆或兩棵以上語法樹的句子,那我們就稱該文法為二義性文法。二義性的本質簡單來說就是不唯一性,只不過用在了描述文法上就稱為二義性。

二義性對計算機這個之直子,極為不友好。所以我們要消除二義性。

答案:返回題目

句子i*(i+i)推導過程如下:

① e => e*e => i*e => i*(e) => i*(e+e) => i*(i+e)

=> i*(i+i)

② e => e*e => e*(e) => e*(e+e) => e*(e+i) => e*(i+i)

=> i*(i+i)

編譯原理文法

文法是用於描述語言的語法結構的形式規則。任何一種語言都有它自己的文法,不管它是機器語言還是自然語言。就像自然語言裡有主謂賓這樣的文法一樣,機器語言也有描述它語言構成的特定文法終結符和 非終結符 在電腦科學和語言學的領域是用來指定推導規則的元素。在某個 形式語法 之中,終結符和非終結符是兩個不交的集合...

編譯原理 文法

編譯原理這種課一聽就知道肯定特別晦澀難懂,上課沒聽懂,今天花了一天時間來學文法,看了一天也是是有些眉目,書上講的並不是特別清楚,倒是從各大部落格中汲取到不少知識。雖然感覺還只是停留在理論階段,但也要記錄一下吧,不然到時候理論都想不起來。文法 g 定義為乙個四元組 vn,vt,p,s 喬姆斯基 cho...

編譯原理與編譯構造 由語言構造文法2

基本思想 產生的兩邊應該具有相同的特性 例1 l 解 s aa b b 這一步是說,句子可以以a b 開頭,之後加乙個a b 數量不等的式子 其中,s a b a a 1 b b a b 1 a aaa 這一步比較神,但是我的理解是這樣的,aa 這個表示式,滿足 a b 因此直接是在 a 之前加了乙...