編譯原理知識點
學習編譯原理和操作系統對編程能力對編程能力的作用在於:
1、學好了編譯原理,才可能編寫出高效,穩健,佔用內存少的程序。
2、學習操作系統對windows相關的編程很有幫助。如果是對操作系統關系不大的C/C++/c#,java之類的編程,關系不大。
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論、技術、方法上都對學生提供了系統而有效的訓練,有利於提高軟體人員的素質和能力。
操作系統(Operating System,簡稱OS)是管理和控制計算機硬體與軟體資源的計算機程序,是直接運行在「裸機」上的最基本的系統軟體,任何其他軟體都必須在操作系統的支持下才能運行。
『貳』 編譯原理中 左遞歸具體解釋是什麼
定義:
"一個文法是左遞歸的,若我們可以找出其中存在某非終端符號A,最終會推導出來的句型(sentential form)裡麵包含以自己為最左符號(left-symbol)的句型"
即
A -> Aa 或
A -> Ba
B -> A
兩種形式的文法.
『叄』 編譯原理follow集與first集的計算
下面我將介紹一下我關於LL(1)文法部分的計算文法非終結符First集以及Follow集兩個知識點的理解。
首先是First集的計算部分,計算First集首先看我們原文法的左邊,原文法左邊不重復的都要進行First集的計算,計算時具體有以下三種情況:
(1)先看產生式後面的第一個符號,如果是終結符,那就可以直接把它寫到這個產生式的First集中,例如:產生式為M->nDc,那在First集中我們就可以直接寫上First (M)={ n };
(2)如果產生式後面的第一個符號是非終結符,就看這個非終結符的產生式,看的時候同樣利用前面的兩種看法;但是當產生式為ε時,則需要把ε帶入到待求First集的元素的產生式中再判斷。例如:A->Bc; B->aM;B->ε,求First(A)時,我們看到A的第一個產生式中的第一個符號是B,B是一個非終結符,所以我們就要接著看B的產生式,B的第一個產生式的第一個符號為a,a是一個終結符,直接把a寫入First(A),B的第二個產生式為ε,把ε帶入A->Bc中,A->c(注意:如果將B->ε帶入表達式後A的產生式為A->ε,ε不可以忽略),c是終結符,所以把c也寫入First(A),最後First (A)={ a,c }。
(3)當產生式右邊全為非終結符,且兩個非終結符又都可以推出ε時,我們需要把這個產生式的所有情況都列出來,再分析。例如:A->BC;B->b|ε;C->c|ε。我們把A的所有產生式利用上述兩種方法列出來就是A->bc,A->b;A->c,A->ε;最後First (A)={b,c, ε}。
接下來介紹一下Follow集的部分,先簡單介紹一下計算Follow集的大致規則。比如我們要求Follow(X),文法中多個產生式中含有X,則需要考慮多種情況,以下是具體計算時的三種情況:
(1)文法開始符:所有文法開始符的Follow集中都有一個#。
(2)S->αB的形式:求Follow(B),因為B的後面為空,把Follow(S)寫入B的Follow集中。
(3)S->αBβ的形式:求Follow(B),B後部不為空。
①當β是終結符時,直接把β寫入Follow(B)。
②當β是非終結符時,將First (β)(如果First(B)中有ε,就把ε刪掉)寫入Follow(B)中。(需要注意的是:如果β->ε,那麼原產生式就變成了S->αB,也就是第二種情況,這兩種情況都要算在Follow(B)中)。