See http://www.webber-labs.com/wp-content/uploads/2015/08/mpl-02.pdf#page=18 exp := exp '+' exp | exp '*' exp | '(' exp ')' | 'a' | 'b' | 'c' left derivation for "a+b" exp ==> exp+exp ==> a+exp ==> a+b exp // parse tree / | \ / | \ exp + exp | | a b left derivations for "a*b+c" exp ==> exp+exp exp // first parse tree ==> exp*exp+exp / | \ // * has higher precedence ==> a*exp+exp / | \ ==> a*b+exp exp + exp ==> a*b+c / | \ | / | \ c exp ==> exp*exp exp * exp ==> a*exp | | ==> a*exp+exp a b ==> a*b+exp ==> a*b+c exp // second parse tree / | \ // + has higher precedence / | \ exp * exp | / | \ a / | \ exp + exp | | b c left derivation for "(a+(b))" exp ==> (exp) ==> (exp+exp) ==> (a+exp) ==> (a+(exp)) ==> (a+(b)) exp // parse tree / | \ / | \ ( exp ) / | \ / | \ exp + exp | / | \ a / | \ ( exp ) | b