using System; using System.Collections.Generic; using System.Text; namespace ln.parse.tokenizer { public class Token { public SourceBuffer SourceBuffer { get; } public int LinearStart { get; } public int Length { get; } public TextPosition TextPosition => SourceBuffer.GetTextPosition(LinearStart); public Token(SourceBuffer sourceBuffer, int start, int length) { SourceBuffer = sourceBuffer; LinearStart = start; Length = length; } public string Value => SourceBuffer.GetText(LinearStart, Length); public class IntegerToken : Token { public IntegerToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class FloatToken : Token { public FloatToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class StringToken : Token { public StringToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class OperatorToken : Token { public OperatorToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class WhiteSpaceToken : Token { public WhiteSpaceToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class IdentifierToken : Token { public IdentifierToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } public class BracketToken : Token { public BracketToken(SourceBuffer sourceBuffer, int start, int length) : base(sourceBuffer, start, length) { } } } }