《編譯原理》文法 終結符和非終結符

2021-09-13 12:53:53 字數 1326 閱讀 9347

終結符非終結符在編譯原理的文法部分是出現得最多的概念,但由於在熟悉編譯原理的人看來,這是個不值一提的簡單概念,所以一般書上都沒有對這兩個概念做明確定義,這導致很多學員在沒有直正的理解其含義的情況下,開始了文法的學習,所以學起來非常吃力。

(這句話說得真好。。。就是那些無視後來人的彙編高手給偶們這些初學的帶來多大的困難)

下面我們一起學習這兩個概念:

終結符:通俗的說就是不能單獨出現在推導式左邊的符號,也就是說終結符不能再進行

推導。

詳細一點說:終結符是乙個形式語言的基本符號。就是說,它們能在乙個形式語法的推導規則的輸入或輸出字串存在,而且它們不能被分解成更小的單位。確切地說,乙個語法的規則不能改變終結符。例如說,下面的語法有兩個規則:

x -> xa

x -> ax

在這種語法之中,a是乙個終結符,因為沒有規則可以把a變成別的符號。不過,有兩個規則可以把x變成別的符號,所以x是非終結符。乙個形式語法所推導的形式語言必須完全由終結符構成。

非終結符:不是終結符的都是非終結符。非終結符可理解為乙個可拆分元素,而終結符是不可拆

分的最小元素。

非終結符是可以被取代的符號。乙個形式文法中必須有乙個起始符號;這個起始符號屬於非終結符的集合。

判斷注意:(1)只要存在有 s→l ,則 s 必然是個非終結符

(2)逗號,[,],(,) 這5個都是終結符

(3)一般書上把非終結符用大寫字母 表示,而終結符用小寫字母表示。

識別符號:就是開始符。由文法產生語言句子的基本思想是:

從識別符號開始,把當前產生的符號串中的非終結符號替換為相應規則右部的符號串,直到

最終全由終結符號組成。這種替換過程稱為推導或產生句子的過程,每一步成為直接推導或

直接產生。

例如:

有文法g2[s]為:

s->ap

s->bq

a->a

a->ca

b->b

b->db

則表示:s 為開始符,s,a,b 為非終結符,而p,q,a,b,c,d 為終結符

來道題?頂得住嗎?

終結符號和非終結符號

1.終結符 它們不能被分解成更小的單位。確切地說,乙個語法的規則不能改變終結符。例如說,下面的語法有兩個規則 x xa x ax 在這種語法之中,a是乙個終結符,因為沒有規則可以把a變成別的符號。不過,有兩個規則可以把x變成別的符號,所以x是非終結符。乙個形式語法所推導的形式語言必須完全由終結符構成...

編譯原理 算符優先法文法分析

include include include include using namespace std 輸入文法 string input 儲存文法 vectorcontext 非終結符 vector char vn 終結符 vector char vt firstvt集 map char stri...

簡單算符優先文法分析程式(編譯原理)

實現算符優先文法分析程式 完成對以下表示式文法的分析程式。includeint find int a,int b 優先關係表 return table a 1 b 1 int in vt char c 可以根據返回的數值去優先關係表裡面查詢優先關係 return n int judge char p...