parser: implement recursive-descent parser with tests

- Parse([]token.Token) (ast.Node, error) converts tokens to AST
- Grammar: expr → term ((+|-) term)*, term → factor ((*|/) factor)*, factor → NUMBER | '(' expr ')'
- Correct operator precedence (* / before + -)
- Left-associative operators
- Error handling: empty input, missing/unexpected parens, trailing tokens, consecutive operators
- 19 unit tests covering success and error cases
2 files changed
tree: fb628f9aa5e539abc5bd2e64240bb0211707be0b
  1. ast/
  2. cmd/
  3. docs/
  4. lexer/
  5. parser/
  6. token/
  7. go.mod