1.语法分析树的定义
给出上下文无关文法G=(V,Σ,R,S),其中
VΣR={S,(,)}={(,)}={S→e,S→SS,S→(S)}
则字符串()()至少可以由如下两种方式推导得到
S⇒SS⇒(S)S⇒()S⇒()(S)⇒()()
或者
S⇒SS⇒S(S)⇒(S)(S)⇒(S)()⇒()()
这两种推导从某种意义上来说是相同的。直观上都能由下图表示:

这样的图称为语法分析树。途中的点叫做顶点,每个顶点有一个标记,标记是V中的一个符号。最上面的顶点叫做根,最底层的顶点叫做树叶。树叶都标记终结符,也可能标记空串e。从左到右连接树叶的标记,得到推导出来的终结符串,称作语法分析树的结果。
2.例子
例3.2.1 设G=(V,Σ,R,S)是一个上下文无关文法,D=x1⇒x2⇒⋯⇒xn和D′=x1′⇒x2′⇒⋯⇒xn′是G中的两个推导,其中xi,xi′∈V∗,i=1,⋯n且x1,x1′∈V−Σ,xn,xn′∈Σ∗。如果n>2且存在整数k,1<k<n使得
(1)对所有的i=k,有xi=xi′;(2)xk−1=xk−1′=uAvBw,此处u,v,w∈V∗,A,B∈V−Σ;(3)xk=uyvBw,此处A→y∈R;(4)xk′=uAvzw,此处B→z∈R;(5)xk+1=xk+1′=uyvzw;
则称D先于D′,记作D≺D′。
例3.2.2 考虑下面三个推导
D1=S⇒SS⇒(S)S⇒((S))S⇒(())S⇒(())(S)⇒(())()D2=S⇒SS⇒(S)S⇒((S))S⇒((S))(S)⇒(())(S)⇒(())()D3=S⇒SS⇒(S)S⇒((S))S⇒((S))(S)⇒((S))()⇒(())()
可见D1≺D2和D2≺D3,但是没有D1≺D3。
如果有序对(D,D′)属于≺的自反对称传递闭包,则称这两个推导是相似的。
每一个在相似性下的等价类,即每一颗语法分析树,有一个推导在≺下是极大的,即没有先于它的推导。
这个推导叫做最左推导。可以从根的标记开始,依据规则反复替换当前字符串中最左边的非终结符得到。
类似的,最右推导是不先于任何其他推导的推导。
3.定理
设G=(V,Σ,R,S)是一个上下文无关文法,A∈V−Σ以及w∈Σ∗,则下述命题等价
(a)A⇒∗w(b)有一颗根为A、结果为w的语法树(c)有最左推导A⇒L∗w(d)有最右推导A⇒R∗w