

A set of grammar rules is ambiguous if there is some input string that can be structured in two or more different ways. For example, the following grammar rule is a natural way of expressing the fact that one way of forming an arithmetic expression is to join two other expressions with a minus sign.
expr : expr '' exprUnfortunately, this grammar rule does not completely specify how all complex inputs should be structured.
The yacc program detects such ambiguities when it is attempting to build the parser.
Consider the problem that confronts the parser when it is given the input:
expr  expr  exprAfter the parser reads the second expr, the visible input is:
expr  exprThis matches the right side of the preceding grammar rule. The parser can reduce the input by the rule. After applying this rule, the input is reduced to expr (the left side of the rule). The parser then reads the final part of the input:
 exprA similar reduction then takes place. This interpretation of the rule is called the ``left associative'' interpretation.
Alternatively, the parser could defer the immediate application of the rule when it has seen:
expr  exprInstead, the parser can continue reading until it sees the whole input:
expr  expr  exprIt can then apply the rule to the rightmost three symbols, reducing them to expr, leaving:
expr  exprNow the rule can be reduced once more. This interpretation is called ``right associative''.
Depending on which interpretation is used, the parser can do either a shift or a reduction after reading:
expr  exprThis is called a shiftreduce conflict. The parser can also have a choice of two legal reductions, called a reducereduce conflict. There are no shiftshift conflicts.