资源描述:
《编译原理语法分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章语法分析语法分析是编译过程的核心部分。语法分析的基本任务是在词法分析识别出单词符号串的基础上,分析判断程序的语法结构是否符合语法规则。语言的语法结构用上下文无关文法来描述,因此,语法分析器的任务本质上是按上下文无关文法的产生式,确定整个单词串是否构成语法上正确的程序。语法分析的方法通常分为两类:自上而下分析法和自下而上分析法3.1文法和语言3.2推导与语法树3.3自上而下分析方法3.4自下而上分析方法3.5LR分析法3.1文法和语言文法是程序语言的生成系统。自动机是程序语言的识别系统。用文法可精确定义一个语言,并
2、依据文法构造出识别该语言的自动机。因此,文法对程序语言和编译程序的构造具有重要意义,如程序语言的词法可用正规文法描述,语法可用上下文无关文法描述,而语义可借助于上下文有关文法描述。3.1.1文法和语言的概念1.语言通常用Σ表示字母表。由字母表Σ中字符组成的有穷序列称为Σ上的字符串或字。字母表Σ上的所有字符串(包括空串)组成的集合用Σ*表示。对于字母表Σ,Σ*上的任一子集称为Σ上的一个语言,记为L,LΣ*。语言L的每个字符串称为语言L的一个语句或句子。2.文法终结符是语言不可再分的基本符号,通常为一个语言的字母表。终结
3、符代表了语法的最小元素,是一种个体记号。非终结符也称语法变量,它代表语法实体或语法范畴。一个非终结符是一个类、一个集合。例如,变量、常量、+、*等为终结符,而“算术表达式”为非终结符,它代表一定算术式组成的类,如i*(i+i)、i+i+i等,即非终结符代表由终结符组成且满足一定规则的符号串的集合。文法可表示为四元组G=(VT,VN,S,ξ),其中(1)VT为非空终结符集;(2)VN为非空非终结符集,且VT∩VN=Φ;(3)S为文法开始符,S∈VN;(4)ξ是产生式的非空有限集,其中每个产生式(规则)记作→或::=
4、左部∈(VT∪VN)+至少含一非终结符,右部∈(VT∪VN)*。产生式(也称产生式规则或规则)是定义语法实体的一种书写规则。一个语法实体的相关规则可能不止一个,如:P→1,P→2,P→n相同左部的产生式可合并为一个:P→1
5、2
6、…
7、n其中,i(i=1,2,…,n)称为P的候选式。例3.1试构造产生标识符的文法。分析:用L表示字母,D表示数字,T表示字母或数字,则L→a∣b∣…∣zD→0∣1∣…∣9T→L∣D用S表示字母数字串,则ST是字母数字串,即S→T
8、ST标识符I或为单个字母,或为一字母后跟字母
9、数字串,即I→L∣LS解:产生标识符的文法G[I]为:G=({a,b,…,z,0,…,9},{I,S,T,L,D},I,ξ)其中,ξ:I→L∣LSS→T∣STT→L∣DL→a∣b∣…∣zD→0∣1∣…∣9例3.2写一文法,使其语言是奇数集,但不允许出现以0打头的奇数。解:将奇数划分为三个部分:最高位允许出现1~9,用非终结符B表示;中间部分可出现任意多位数字0~9,每一位用非终结符D表示;最低位只出现1,3,5,7,9,用A表示。由于中间部分可任意位,故需另引入一非终结符M,它包括最高位和中间部分。MB…最高位中间位D
10、DDA最低位解:奇数集文法G[N]为:G=({0,1,…,9},{N,A,M,B,D},N,ξ)ξ:N→A
11、MAM→B
12、MDA→1
13、3
14、5
15、7
16、9B→1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9D→0
25、B3.文法产生的语言设G=(VT,VN,S,ξ)且,∈(VT∪VN)*,若存在产生式A→δ,δ∈(VT∪VN)*,则称A可直接推出δ,记为Aδ注意与→的不同:→是产生式中的定义记号,表示直接推导,是对文法符号串A中A用产生式A→δ的右部δ替换。关于推导的两点说明:(1)若1可直接推出2,2可直接
26、推出3,…,即存在一个自1至n的推导序列:123…n(n>0)则称1可推导出n,记为1n,表示从1出发经1步或若干步可推导出n(2)若记11,则1n表示从1出发,经过0步或若干步可推导出n,即1n意味着或1=n,或1n。+0**+例如,考虑算术表达式文法G[E]:E→E+E∣E*E∣(E)│i非终结符E代表一类算术表达式,从E出发可进行一系列推导,表达式i+i*i的推导如下:EE+EE+E*EE+E*iE+i*ii+i*I注意:在每一步推导中
27、,只能对其中一个非终结符用其对应的产生式右部的一个候选式来替换。假定G[S]是一个文法,S是其开始符号,若S,∈(VT∪VN)*,则称是文法G[S]的一个句型;若S,∈VT*,则称是文法G[S]的一个句子。由上述定义知:仅含终结符的句型是一个句子。开始符S是一个句型而不是一个句子。i+i*i是一个句子,也是一个句型,E