The model
A lexer groups characters into tokens such as identifiers, numbers, and punctuation. A parser consumes that token stream according to a grammar and builds a structured representation, often an abstract syntax tree. Separating these jobs makes it easier to handle whitespace, literals, precedence, and syntax errors coherently.
A concrete walk-through
For the expression 2 + 3 * 4, a precedence-aware parser constructs multiplication beneath addition so evaluation yields 14. Parentheses alter the tree by creating an explicit grouping. The AST usually omits surface details that do not affect meaning, such as redundant whitespace.
Costs and failure cases
A parser accepting syntactically valid input does not prove the names are declared or types match; those checks belong to later semantic analysis. Error recovery matters in editors, where parsing should continue after a malformed statement to provide useful diagnostics.
Check your understanding
Draw the AST for a - b - c under left-associative subtraction. Then explain what output would result if the parser accidentally made it right-associative.