ambiguous grammar: same strings, diff syntax trees | generate strings | precedence | associativity (left or right) | each rule matches expressions at its precedence level or higher | some parsing techniques have trouble with left-recursion | recursive-descent parsing (simplest way) | parser combinators | earley parsers | shunting yard algorithm | packrat parsing | top-down parser | each grammar rule becomes a function (eg, method in parser class) | terminal vs non-terminal | predictive parsers | cascaded errors | panic mode | synchronization