编译原理练习题,给定一个文法的LM,RM推导

给定一个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" 两种方式生成,而且这两种方式的推导树不同。因此,该文法不是一个二义文法。