当前位置:文档之家› 第三章 语法分析概况

第三章 语法分析概况


第三章 语法分析 3.6 有文法G[S]: S→aAcB|Bd A→AaB|c B→bScA|b
【解答】 (1) 分别画出对应句型aAaBcbbdcc和aAcbBdcc
的语法树如图3-4的(a)、(b)所示。
S a A c B a A S c B
A a B b S c A B d b (a) c
b S c A B d (b) c
个非终结符写出不带回溯的递归子程序。 【解答】 消除文法G[S]的左递归: S→(T) | a+S | a T→ST' T'→,ST' | ε 改写规则 A→Aα∣β 改写为
A→βA' A'→α A' |ε
第三章 语法分析
提取公共左因子:
S→(T) | aS' S'→+S | ε
T→ST'
T'→,ST' | ε
第三章 语法分析 3.3 已知文法 G[S] 为 S→aSb|Sb|b ,试证明文法 G[S] 为二义文 法。 【解答】 由文法G[S]:S→aSb|Sb|b ,对句子aabbbb 可对应如 图所示的两棵语法树。 S S
a S b a S b S b b S b a S b a S b b
因此,文法G[S]为二义文法。
【解答】 (2) 句子acabcbbdcc的最左推导如下:
SaAcB aAaBcB acaBcB
S a A c B
acabcB
acabcbScA acabcbBdcA acabcbbdcA acabcbbdcc
A a B b S c A c b B d c b
第三章 语法分析 3.7 对于文法G[S]: S→(L)|aS|a L→L,S|S (1) 画出句型(S,(a))的语法树; (2) 写出上述句型的所有短语、直接短语、句柄、素 短语和最左素短语。
S
S
b b
a
S S b
b b
第三章 语法分析 3.3 已知文法 G[S] 为 S→aSb|Sb|b ,试证明文法 G[S] 为 二义文法。 【解答 2】 由文法 G[S] : S→aSb|Sb|b ,对句子 abbb 存 在两种不同的最右推导:
S aSb aSbb abbb
S Sb aSbb abbb 因此,文法G[S]为二义文法。
第三章 语法分析
3.7 对于文法G[S]: S→(L)|aS|a L→L,S|S 【解答】 (1) 句型(S, (a))的语法树如图3-5所示。
S ( L ) L , S S ( L ) S a
图3-5 句型(S,(a))的语法树
第三章 语法分析 3.7 对于文法G[S]: S→(L)|aS|a L→L,S|S
SaAcB
aAcbScA aAcbScc aAcbBdcc aAcbbdcc
退六步: aAaBcbbdcc 退五步: AaB,bbdcc 退四步: AaB,bd,c
退三步: AaB,bd
退两步: AaB,b 退一步:Abbdcc的短语:AaB,b,bd,c, bbdcc, aAaBcbbdcc 句型aAaBcbbdcc的直接短语: AaB,b,c 句型aAaBcbbdcc的句柄: AaB
图3-4 习题3.6的语法树 (a) aAaBcbbdcc; (b) aAcbBdcc
第三章 语法分析
对树(a),直接短语有3个:AaB、b和c,而AaB为最 左直接短语(即为句柄)。对树(b),直接短语有两个: Bd和c,而Bd为最左直接短语。
第三章 语法分析 3.6 有文法G[S]: S→aAcB|Bd A→AaB|c B→bScA|b
第三章 语法分析 3.6 有文法G[S]: S→aAcB|Bd A→AaB|c B→bScA|b 【解答】 (1)句型aAcbBdcc的最右推导
SaAcB
aAcbScA aAcbScc aAcbBdcc
退四步: aAcbBdcc 退三步: bBdcc 退两步: Bd,c
退一步:Bd
句型aAcbBdcc的短语:Bd,c, bBdcc , aAcbBdcc 句型aAcbBdcc的直接短语: Bd,c 句型aAcbBdcc的句柄: Bd
S
【解答】(2) 由语法树可知: 短语:S、a、(a)、S,(a)、(S,(a)); 直接短语:a、S; 句柄:S; 素短语:a
( L ) L , S S ( L ) S a
第三章 语法分析 3.9 考虑文法G[S]: S→(T) | a+S | a T→T,S | S
消除文法的左递归及提取公共左因子,然后对每
第三章 语法分析 3.6 有文法G[S]: S→aAcB|Bd A→AaB|c
B→bScA|b
(1) 试求句型aAaBcbbdcc和aAcbBdcc的句柄; (2) 写出句子acabcbbdcc的最左推导过程。
第三章 语法分析 3.6 有文法G[S]: S→aAcB|Bd A→AaB|c B→bScA|b 【解答】 (1)句型aAaBcbbdcc的最右推导
不带回溯的递归子程序如下:
void match (token t) {
(对句子abbb也可画出 两棵不同语法树)
第三章 语法分析 3.3 已知文法 G[S] 为 S→aSb|Sb|b ,试证明文法 G[S] 为 二义文法。 【解答 1】 由文法 G[S] : S→aSb|Sb|b ,对句子 abbb 可 对应如图所示的两棵语法树。
S a S b
因此,文法G[S]为二义文法。
第三章 语法分析 3.4 已知文法 G[S] 为 S→SaS|ε ,试证明文法 G[S] 为二义文法。
【解答1】 由文法G[S]:S→SaS|ε,句子aa的语法树如图所示。
S S a S S a S (a) S S a S S a S (b)
因此,文法G[S]为二义文法。
第三章 语法分析 3.4 已知文法 G[S] 为 S→SaS|ε ,试证明文法 G[S] 为二义文法。 【解答2】 由文法G[S]:S→SaS|ε,句子aa存在两种不同的最 右推导: S SaS Sa SaSa Saa aa S SaS SaSaS SaSa Saa aa 因此,文法G[S]为二义文法。
相关主题