導航:首頁 > 源碼編譯 > 編譯原理的文法由哪些組成

編譯原理的文法由哪些組成

發布時間:2022-09-07 10:11:32

『壹』 編譯原理

編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。編譯原理課程是計算機相關專業學生的必修課程和高等學校培養計算機專業人才的基礎及核心課程,同時也是計算機專業課程中最難及最挑戰學習能力的課程之一。編譯原理課程內容主要是原理性質,高度抽象[1]。

中文名
編譯原理[1]
外文名
Compilers: Principles, Techniques, and Tools[1]
領域
計算機專業的一門重要專業課[1]
快速
導航
編譯器

編譯原理課程

編譯技術的發展

編譯的基本流程

編譯過程概述
基本概念
編譯原理即是對高級程序語言進行翻譯的一門科學技術, 我們都知道計算機程序由程序語言編寫而成, 在早期計算機程序語言發展較為緩慢, 因為計算機存儲的數據和執行的程序都是由0、1代碼組合而成的, 那麼在早期程序員編寫計算機程序時必須十分了解計算機的底層指令代碼通過將這些微程序指令組合排列從而完成一個特定功能的程序, 這就對程序員的要求非常高了。人們一直在研究如何如何高效的開發計算機程序, 使編程的門檻降低。[2]
編譯器
C語言編譯器是一種現代化的設備, 其需要藉助計算機編譯程序, C語言編譯器的設計是一項專業性比較強的工作, 設計人員需要考慮計算機程序繁瑣的設計流程, 還要考慮計算機用戶的需求。計算機的種類在不斷增加, 所以, 在對C語言編譯器進行設計時, 一定要增加其適用性。C語言具有較強的處理能力, 其屬於結構化語言, 而且在計算機系統維護中應用比較多, C語言具有高效率的優點, 在其不同類型的計算機中應用比較多。[3]
C語言編譯器前端設計
編譯過程一般是在計算機系統中實現的, 是將源代碼轉化為計算機通用語言的過程。編譯器中包含入口點的地址、名稱以及機器代碼。編譯器是計算機程序中應用比較多的工具, 在對編譯器進行前端設計時, 一定要充分考慮影響因素, 還要對詞法、語法、語義進行分析。[3]
1 詞法分析[3]
詞法分析是編譯器前端設計的基礎階段, 在這一階段, 編譯器會根據設定的語法規則, 對源程序進行標記, 在標記的過程中, 每一處記號都代表著一類單詞, 在做記號的過程中, 主要有標識符、關鍵字、特殊符號等類型, 編譯器中包含詞法分析器、輸入源程序、輸出識別記號符, 利用這些功能可以將字型大小轉化為熟悉的單詞。[3]
2 語法分析[3]
語法分析是指利用設定的語法規則, 對記號中的結構進行標識, 這包括句子、短語等方式, 在標識的過程中, 可以形成特殊的結構語法樹。語法分析對編譯器功能的發揮有著重要影響, 在設計的過程中, 一定要保證標識的准確性。[3]
3 語義分析[3]
語義分析也需要藉助語法規則, 在對語法單元的靜態語義進行檢查時, 要保證語法規則設定的准確性。在對詞法或者語法進行轉化時, 一定要保證語法結構設置的合法性。在對語法、詞法進行檢查時, 語法結構設定不合理, 則會出現編譯錯誤的問題。前端設計對精確性要求比較好, 設計人員能夠要做好校對工作, 這會影響到編譯的准確性, 如果前端設計存在失誤, 則會影響C語言編譯的效果。[3]

『貳』 編譯原理的文法是什麼

文法是描述語言規則的形式規則。實際上就是用一個四元組G=(VT,VN,S,P)定義的一個推理方式。其中VT是終結符,VN是非終結符,S是開始符號,P是一組產生規則。

『叄』 編譯原理的文法

「文法是以有窮的集合刻畫無窮的集合的一個工具」,有窮的集合應該是已經出現的,人們普遍接受的詞、片語或句子,無窮的集合就是有窮的集合的詞、片語或句子,創造新的集合過程和結果,有待進一步認識接受。
我們的文法規定內涵是已經明確定義的和正在定義(聲明)的內容。反映到計算機語言程序中就是編程時已經定義的和正在定義(聲明)的字元或字元串。文法可以以表的形式,或詞典形式存放。

『肆』 文法的定義

文法是一個漢語詞彙,讀音為wén fǎ ,即文章的書寫法規,一般用來指以文字、詞語、短句、句子的編排而組成的完整語句和文章的合理性組織。
定義
文法即文章的書寫法規,一般用來指以文字、詞語、短句、句子的編排而組成的完整語句和文章的合理性組織。[2]

組成規律
●最簡單的語句組合一:主詞及動詞:

「我」「哭了」

「天氣」「改變了」

「哭笑」「難分」

●最簡單的語句組合二:主詞、動詞及受詞:(括弧內為隱藏語)

我愛你

「道」「可」「道」,「(這個道字)」「〈並〉非」「常道」。《道德經》老子

「打羽毛球」「是」「最好的(運動)」

「駕駛」「〈使我〉」「樂趣無窮」

●比較復雜的語句組合一:主語〈短句〉、謂語及賓語:

例:「我這個從來沒有戀愛經驗的少年人」、「竟然不知為了什麼原因而喜歡了」及「一個黃毛小丫頭」

●復雜的語句組合二:主語及復式謂語:

例:「有些頭腦守舊而自以為是的讀書人」、「認為如廁的動作不雅,」「所以寫成出恭。」

在口語中,因為說話者或受話人都知道相方的關系和說話主題,所以大都隱去主詞或受詞。但在書寫文章時,必須要清楚表明主和賓雙方。

一般結構
●動賓結構:一般口語,多是動賓結構的,即前面是動詞,後面是名片語成的。這是因為受話人明知語句的主語而不用說出來的關系。

〈你正在──主語不用說出來〉拍馬屁、

〈你真的是〉痴線(廣東慣用語)、〈你是在〉敲竹杠、〈你在〉潑冷水、〈你不要〉耍花招等。

●主謂結構,主謂(陳述)結構,即前面是主詞或主語,後面加上一個描述或動作的單字、詞語或片語組成的。這是因為說話語句中的受詞或賓語不用說出來的關系 。

多為說話語句中的動詞部分,主語和賓語也不用說出了。 例如:(這個)天曉得,、〈他的〉嘴巴軟〈了〉等。

●復詞結構

●偏正結構由兩組〈或以上〉字詞所組成的〈復合〉名詞──用作主語部分,或賓語部分。

●形容詞〈相當於英語的形容詞〉及名詞。

替罪羊、耳邊風、糊塗蟲、絆腳石等。

鬼畫〈形容詞〉符

由兩組〈或以上〉字詞所組成的短句,如謂語部分。

●動詞及副詞。

跳得很遠、大聲哭叫、清早起來

類型
文法形式

在計算機科學中,文法是編譯原理的基礎,是描述一門程序設計語言和實現其編譯器的方法。文法的描述多用BNF(巴克斯範式),而另一個重要的概念:正則表達式,也是文法的另一種形式。

文法分類

自從喬姆斯基(Chomsky)於1956年建立形式語言的描述以來,形式語言的理論發展很快。這種理論對計算機科學有著深刻的影響,特別是對程序設計語言的設計、編譯方法和計算復雜性等方面更有重大的作用。

喬姆斯基把文法分成四種類型,即0型、1型、2型和3型。這幾類文法的差別在於對產生式施加不同的限制。

多數程序設計語言的單詞的語法都能用正規文法或3型文法來描述。

3型文法G=(VN,VT,P,S)的P中的規則有兩種形式:一種是前面定義的形式,即:A→aB或A→a其中A,B∈VN ,a∈VT*,另一種形式是:A→Ba或A→a,前者稱為右線性文法,後者稱為左線性文法。正規文法所描述的是VT*上的正規集。

四個文法類的定義是逐漸增加限制的,因此每一種正規文法都是上下文無關的,每一種上下文無關文法都是上下文有關的,而每一種上下文有關文法都是0型文法。稱0型文法產生的語言為0型語言。上下文有關文法、上下文無關文法和正規文法產生的語言分別稱為上下文有關語言、上下文無關語言和正規語言。

類型說明

文法G定義為四元組(VN,VT,P,S )其中

VN:非終結符號(或語法實體,或變數)集;

VT:終結符號集;

P: 規則的集合;

VN,VT和P是 非空有窮集。

S:稱作識別符號或開始符號的一個非終結符,它至少要在一條產生式中作為左部出現。

VN和VT不含公共的元素,即VN ∩ VT = φ

用V表示VN ∪ VT ,稱為文法G的字母表或字匯表

規則,也稱重寫規則、產生式或生成式,是形如→或 ∷=的( ,)有序對,其中是字母表V的正閉包V+中的一個符號,是V*中的一個符號。  稱為規則的左部,  稱作規則的右部。

設G=(VN,VT,P,S),如果它的每個產生式α→β是這樣一種結構:α∈( VN∪VT )*且至少含有一個非終結符,而β∈( VN∪VT )*,則G是一個0型文法。

0型文法也稱短語文法。一個非常重要的理論結果是,0型文法的能力相當於圖靈機(Turing)。或者說,任何0型語言都是遞歸可枚舉的;反之,遞歸可枚舉集必定是一個0型語言。

對0型文法產生式的形式作某些限制,以給出1,2和3型文法的定義。

設G=(VN,VT,P,S)為一文法,若P中的每一個產生式α→β均滿足|β|≥|α| ,僅僅S→ε除外,則文法G是1型或上下文有關的。

在有些文獻給的定義中,將上下文有關文法的產生式的形式描述為α1Aα2→α1βα2,其中α1、α2和β都在( VN∪VT

)*中(即在V*中),β≠ε,A在VN中。這種定義與前邊的定義等價。但它更能體現"上下文有關"這一術語,因為只有A出現在α1和α2的上下文中,才允許用β取代A。

設G=(VN,VT,P,S),若P中的每一個產生式α→β滿足:α是一非終結符,β∈( VN∪VT )*則此文法稱為2型的或上下文無關的。有時將2型文法的產生式表示為形如:A→β其中A∈VN,也就是說用β取代非終結符A時,與A所在的上下文無關,因此取名為上下文無關文法。

例4.1和例4.2中的文法都是上下文無關的,下面我們再給出一個例子(例4.4),例中的文法G是上下文無關文法,G的語言是由相同個數的a和b所組成的{a,b}*上的串。

設G=(VN,VT,P,S),若P中的每一個產生式的形式都是A→aB或A→a,其中A和B都是非終結符,a是終結符,則G是3型文法或正規文法。

『伍』 編譯原理,左線性文法

{l}{l,d}*表示集合 {l}和{l,d}*的乘積,具體含義為「以l開頭的、後面跟著由l和d組成的任意串」。
該文法就是一般語言中的「標識符」的定義(其中:l代表字母letter,d代表數字digit)

『陸』 【編譯原理】第二章:語言和文法



上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。

約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:

產生式

可以簡寫為:

如上例中,

可以簡寫為:

給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導
如上例中, 可以推導出 或 或 等等。

如果 ,
可以記作 ,則稱為 經過n步推導出 ,記作 。

推導的反過程稱為 歸約

如果 ,則稱 是 的一個 句型(sentential form )。

由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
即:


文法

表示什麼呢?
代表小寫字母;
代表數字;
表示若干個字母和數字構成的字元串;
說明 是一個字母、或者是字母開頭的字元串。
那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。

並、連接、冪、克林閉包、正閉包。
如上例表示為:

中必須包含一個 非終結符


產生式一般形式:
即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。

上下文有關文法不包含空產生式( )。


產生式的一般形式:
即產生式左邊都是非終結符。

右線性文法
左線性文法
以上都成為正則文法。
即產生式的右側只能有一個終結符,且所有終結符只能在同一側。

例:(右線性文法)

以上文法滿足右線性文法。
以上文法生成一個以字母開頭的字母數字串(標識符)。
以上文法等價於 上下文無關文法

正則文法能描述程序設計語言中的多數單詞。

正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。

根節點 表示文法開始符號S;
內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。

給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語
如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語

直接短語一定是某產生式的右部,但反之不一定。

如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的

二義性原因:多個if只有一個else;
消岐規則:每個else只與最近的if匹配。

『柒』 編譯原理題:分別構造下列語言的文法(4個題) 200分獻上。。。

(3)任何不是以0打頭的所有奇整數所組成的集合

解:G(S)
=
({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,
I→J|2|4|6|8,
Jà1|3|5|7|9},S)
(4)所有偶數個0和偶數個1所組成的符號串集合

解:對應文法為
S→0A|1B|e,A→0S|1C
B→0C|1S
C→1A|0B

『捌』 編譯原理四元式

四元式的一般形式為(op, arg1, arg2, result),其中:op為一個二元(也可以是零元或一元)運算符。arg1和arg2為兩個運算對象,可以是變數、常數或者系統定義的臨時變數名。result為運算結果。
第一步:T1=a*b,
第二步:T2=c*d,
第三步:T3=T2/e,
第四步:T4=T1-T3,
第五步:f=T4.

『玖』 編譯原理中 文法 文法G定義為四元組(Vn ,Vt,P,S)這4個是什麼意思 另外 終結符和非終結符是什麼意思

文法G是一個四元式(Vt,Vn,S,P)
其中Vt是一個非空有限集,它的每個元素稱為終結符號
Vn是一個非空有限集,它的每個元素稱為非終結符號(Vt和Vn的交集為空)
S是一個非終結符號,稱為開始符號
P是一個產生式集合(有限),每個產生式的形式是P-->a

開始S必須在某個產生式的左部出現一次

終結符指組成語言的基本符號(如基本字、標識符、常數、算符、界符)
非終結符號(也稱語法變數)表示一定符號串的集合。

你看到小寫字母一般是終結符,大寫字母肯定是非終結符

不明白可以聯系。

『拾』 編譯原理中,形式語言里怎麼區分2型文法與3型文法

二型文法如下:
S->Ac
S->Sc
A->ab
A->aAb
三型文法如下:
S->aS
A->bA
B->cB
B->c
A->Bb
A、2型文法是上下文無關文法,表現在產生式上就是產生式的左部只有一個非終結符;3型文法從廣義上講包括左線形文法、右線形文法和正規文法

B、左線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有一個,且必須位於產生式右部的最左端。
C、右線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有一個,且必須位於產生式右部的最右端

D、正規文法是右線形文法的一個子集,其產生式右部只有三種情況:
1)空串
2)只有一個終結符
3)只有一個終結符後接一個非終結符
E、所有的3型文法都是2型文法。

閱讀全文

與編譯原理的文法由哪些組成相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:768
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:843
安卓怎麼下載60秒生存 瀏覽:802
外向式文件夾 瀏覽:235
dospdf 瀏覽:430
怎麼修改騰訊雲伺服器ip 瀏覽:387
pdftoeps 瀏覽:492
為什麼鴻蒙那麼像安卓 瀏覽:735
安卓手機怎麼拍自媒體視頻 瀏覽:185
單片機各個中斷的初始化 瀏覽:723
python怎麼集合元素 瀏覽:480
python逐條解讀 瀏覽:832
基於單片機的濕度控制 瀏覽:498
ios如何使用安卓的帳號 瀏覽:882
程序員公園采訪 瀏覽:811
程序員實戰教程要多長時間 瀏覽:974
企業數據加密技巧 瀏覽:134
租雲伺服器開發 瀏覽:813
程序員告白媽媽不同意 瀏覽:335
攻城掠地怎麼查看伺服器 瀏覽:600