We'll build a complete command-line calculator from scratch using Rust. Starting with a minimal REPL, we'll progressively add a tokenizer that breaks expressions into meaningful tokens, implement the Shunting Yard algorithm to convert infix notation to Reverse Polish Notation, and build a stack-based evaluator that computes the final result.
Along the way we'll practice idiomatic Rust patterns: custom error types with Display, the Result/? pipeline, newtype wrappers, trait implementations (FromStr, Add, Sub, Mul, Div), and test-driven development. By the end, our calculator handles parenthesized expressions with proper operator precedence, decimal numbers, and clear error messages for invalid input.