Add AST package: Node interface, NumberLit, BinaryExpr

- Sealed Node interface with unexported marker method
- NumberLit holds float64 value
- BinaryExpr holds Op (token.Type), Left and Right children
- Tests verify interface satisfaction, data integrity, and nesting
diff --git a/ast/ast.go b/ast/ast.go
new file mode 100644
index 0000000..f1e953d
--- /dev/null
+++ b/ast/ast.go
@@ -0,0 +1,26 @@
+package ast
+
+import "matheval/token"
+
+// Node is the interface all AST nodes implement.
+// The unexported marker method seals the interface — only types
+// in this package can implement it.
+type Node interface {
+	node() // sealed marker
+}
+
+// NumberLit represents a numeric literal (e.g. 3.14).
+type NumberLit struct {
+	Value float64
+}
+
+func (*NumberLit) node() {}
+
+// BinaryExpr represents a binary operation (e.g. 1 + 2).
+type BinaryExpr struct {
+	Op    token.Type // Plus, Minus, Star, Slash
+	Left  Node
+	Right Node
+}
+
+func (*BinaryExpr) node() {}