I was reading https://www.cs.odu.edu/~zeil/cs390/f16/Public/cfg/index.html and came across this example grammar:
Expr -> Expr + Term
Expr -> Expr - Term
Expr -> Term
Term -> Term * Factor
Term -> Term/Factor
Factor -> (Expr)
Factor -> id
Using this grammar, the following parse tree is given for the string "a - b - c":
My question is, how are the Factor non-terminals being produced from Term non-terminals? I don't see how this is done in the grammar. To me it would seem that the grammar needs an extra production rule like Term -> Factor.
Absolutely correct. The grammar is missing the production Term ⇒ Factor
, as can be seen in the parse tree.