A method to disambiguate
Example
With grammar:
<expn> --> <expn> + <expn> |
<expn> - <expn> |
<expn> * <expn> |
<expn> / <expn> |
<expn> ^ <expn> |
(<expn>) |
<identifier> |
<literal>
Example of ambiguous statement is:
We disambiguate with precedence.
<expn> --> <expn> <add-op> <expn> | <mult-exp>
<mult-exp> --> <mult-exp> <mult-op> <mult-exp> | <pow-exp>
<pow-exp> --> <pow-exp> ^ <pow-exp> | <br-exp>
<pow-exp> --> <pow-exp> ^ <pow-exp> | <br-exp>
<br-exp> --> (<expn>)| <simple>
<simple> --> <identifier> | <literal>
<add-op> --> + | -
<mult-op> --> * | /
We can remove ambiguity with left or right associativity
<expn> --> <expn> <add-op> <mult-exp> | <mult-exp>
<mult-exp> --> <mult-exp> <mult-op> <pow-exp> | <pow-exp>
<pow-exp> --> <br-exp> ^ <pow-exp> | <br-exp>
<br-exp> --> (<expn>) | <simple>
<simple> --> <identifier> | <literal>
<add-op> --> + | -
<mult-op> --> * | /
