| package token |
| |
| import "fmt" |
| |
| // Type represents the type of a lexical token. |
| type Type int |
| |
| const ( |
| Number Type = iota // numeric literal |
| Plus // + |
| Minus // - |
| Star // * |
| Slash // / |
| LParen // ( |
| RParen // ) |
| EOF // end of input |
| ) |
| |
| // String returns a human-readable name for the token type. |
| func (t Type) String() string { |
| switch t { |
| case Number: |
| return "Number" |
| case Plus: |
| return "+" |
| case Minus: |
| return "-" |
| case Star: |
| return "*" |
| case Slash: |
| return "/" |
| case LParen: |
| return "(" |
| case RParen: |
| return ")" |
| case EOF: |
| return "EOF" |
| default: |
| return fmt.Sprintf("Unknown(%d)", int(t)) |
| } |
| } |
| |
| // Token represents a single lexical token. |
| type Token struct { |
| Type Type // the kind of token |
| Literal string // raw text (e.g. "3.14", "+") |
| Pos int // byte offset in input string |
| } |