This document introduces parsing and context-free grammars. It discusses how a parser uses a context-free grammar to determine if a program's syntax is correct by building a parse tree. It then provides examples of context-free grammars for simple languages involving parentheses, palindromes, and arithmetic expressions. The document also discusses ambiguity in grammars and ways to eliminate it, such as removing empty productions and avoiding left recursion.