给定一个Grammer:S -> S+S|SS|(S)|S*|a with a string (a+a)*a
(1) Give a LM derivation, a RM derivation and a parser tree for the string; Justify whether the grammar is ambiguous or not
给出它的最左和最右推导以及分析树,并判断这个文法是否有歧义
左
S → S+S
→ SS+S
→ aS+S
→ aa+S
→ aa+SS
→ aa+(S)+S
→ aa+(S)+a
→ (a+a)+a
右
S → S+S
→ S+S+S
→ S+S+a
→ S+SS+a
→ S+(S)+a
→ S+(S+S)+a
→ S+(a+S)+a
→ S+(a+a)+a
→ (a+a)+a
分析树
S
___/ | \_____
/ | \ \
S + S |
| / \ |
a S + a
/ | \
S + S
| |
a a
该文法是有歧义的,因为它存在多种不同的最左或最右推导方式可以生成同一个字符串。例如,字符串 "(a+a)*a" 可以通过 "S+S" 和 "SS" 两种方式生成,而且这两种方式的推导树不同。因此,该文法不是一个二义文法。