The document describes a syntax analyzer (also known as a parser) which checks if a given source program satisfies the rules of a context-free grammar. The parser creates a parse tree representing the syntactic structure of the program if it satisfies the grammar. Context-free grammars use productions rules and define the syntax of a programming language. Parsers can be top-down or bottom-up and work on a stream of tokens from a lexical analyzer. Ambiguous grammars require disambiguation to ensure a unique parse tree for each program.