namespace NubLang.Syntax.Tokenization; public abstract class Token(SourceSpan span) { public SourceSpan Span { get; } = span; } public class IdentifierToken(SourceSpan span, string value) : Token(span) { public string Value { get; } = value; } public class LiteralToken(SourceSpan span, LiteralKind kind, string value) : Token(span) { public LiteralKind Kind { get; } = kind; public string Value { get; } = value; } public enum LiteralKind { Integer, Float, String, Bool } public class SymbolToken(SourceSpan span, Symbol symbol) : Token(span) { public Symbol Symbol { get; } = symbol; } public enum Symbol { Func, Return, If, Else, While, Break, Continue, Colon, OpenParen, CloseParen, OpenBrace, CloseBrace, OpenBracket, CloseBracket, Comma, Period, Assign, Bang, Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Plus, Minus, Star, ForwardSlash, Struct, Caret, Ampersand, DoubleColon, Namespace, Let, Alloc, Calls, Trait, Impl, For, Extern, Semi, Arrow, Template }