要點:
- 符號和符號串的相關概念
- 文法和語言的形式定義
- 文法的類型
- 上下文無關文法及其語法樹
- 上下文無關文法的句型分析
- 有關文法實用中的一些說明
目的:
掌握文法和語言的相關概念,爲以後的詞法分析、語法分析、語義分析等做出準備。
2.1 文法的直觀概念
語言:
是由句子組成的集合,是一組記號所構成的集合。
漢語—— 所有符合漢語語法的句子的全體
英語 —— 所有符合英語語法的句子的全體
程序設計語言 —— 所有該語言的程序的全體
形式語言和文法
如果不考慮語義和語用,只從語法這一側面來看語言,這種意義下的語言稱作形式語言。
形式語言抽象地定義爲一個數學系統。
“形式”是指:語言的所有規則只以什麼符號串能出現的方式來陳述。
形式語言理論是對符號串集合的表示法、結構及其特性的研究。是程序設計語言語法分析研究的基礎。
文法:描述詞法、語法規則的工具。用一組規則嚴格定義句子的結構,即對含有“無窮句子”的語言進行“有窮的表示”。
2.2 符號和符號串
2.3 文法和語言的形式定義
文法的定義
推導的定義
句型、句子
語言
2.4 文法的類型
2.5 上下文無關文法及其語法樹
二義文法
- 若一個文法存在某個句子對應兩棵不同的語法樹,則稱這個文法是二義的。
- 或者,若一個文法存在某個句子有兩個不同的最左(右)推導,則稱這個文法是二義的。
產生某上下文無關語言的每一個文法都是二義的,則稱此語言是先天二義的。
注:程序設計語言的文法不要二義!
2.6 句型的分析
一般畫出語法樹來判斷
判斷方法:一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語;
當子樹中不包含其他更小的子樹時,該子樹葉結點所組成的字符串就是該句型的直接(簡單)短語;
一個句型的最左直接短語稱爲該句型的句柄。
每棵語法樹的葉子結點從左到右排列構成一個句型
每棵語法樹的子樹的葉子結點從左到右排列構成一個短語
每棵語法樹的簡單子樹(只有父子兩層結點)的葉子結點從左到右排列構成一個簡單(直接)短語
2.7 有關文法實用中的一些說明
練習
答案:B
答案:(1) 3 (2)1010,0110,1001,0101
答案:BCD
答案:
短語:E+T、(E+T)、F、 F*(E+T)、E+F*(E+T)
直接短語:F、E+T
句柄:F
答案:
(1)終結符:if, then, else,,x,-,(,)
非終結符:S,A,B,C,D
(2)短語:if x+x then xx else –x,x+x,x*x, –x,x
直接短語:x
句柄:x
答案:B
答案:D
總結:
(1) 優先級最低的VT,出現在開始符號的產生式中
(2) 優先級越低,VT離S越近
(3) 右向左結合——左遞歸
左向右結合——右遞歸