ln.parse/ln.parse/tokenizer/Token.cs

74 lines
2.9 KiB
C#
Raw Normal View History

2020-11-19 20:32:34 +01:00
using System;
using System.Collections.Generic;
2020-11-24 23:27:10 +01:00
using System.Runtime.CompilerServices;
2020-11-19 20:32:34 +01:00
using System.Text;
namespace ln.parse.tokenizer
{
public class Token
{
public SourceBuffer SourceBuffer { get; }
public int LinearStart { get; }
public int Length { get; }
2020-11-24 18:17:58 +01:00
public string Value { get; private set; }
2020-11-19 20:32:34 +01:00
public TextPosition TextPosition => SourceBuffer.GetTextPosition(LinearStart);
public Token(SourceBuffer sourceBuffer, int start, int length)
{
SourceBuffer = sourceBuffer;
LinearStart = start;
Length = length;
}
2020-11-24 18:17:58 +01:00
public Token(SourceBuffer sourceBuffer, int start, int length, string value)
{
SourceBuffer = sourceBuffer;
LinearStart = start;
Length = length;
Value = value;
}
2020-11-19 20:32:34 +01:00
2020-11-24 18:17:58 +01:00
public string TokenSource => SourceBuffer.GetText(LinearStart, Length);
2020-11-19 20:32:34 +01:00
2020-11-24 23:10:41 +01:00
public virtual object NativeValue { get; }
2020-11-24 23:27:10 +01:00
public bool Is<T>(String value) => (this is T) && Value.Equals(value);
2020-11-19 20:32:34 +01:00
public class IntegerToken : Token
{
2020-11-24 18:17:58 +01:00
public IntegerToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Int32.Parse(Value);
2020-11-19 20:32:34 +01:00
}
public class FloatToken : Token
{
2020-11-24 18:17:58 +01:00
public FloatToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Double.Parse(Value);
2020-11-19 20:32:34 +01:00
}
public class StringToken : Token
{
2020-11-24 18:17:58 +01:00
public StringToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Value;
2020-11-19 20:32:34 +01:00
}
public class OperatorToken : Token
{
2020-11-24 18:17:58 +01:00
public OperatorToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Value[0];
2020-11-19 20:32:34 +01:00
}
public class WhiteSpaceToken : Token
{
2020-11-24 18:17:58 +01:00
public WhiteSpaceToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Value;
2020-11-19 20:32:34 +01:00
}
public class IdentifierToken : Token
{
2020-11-24 18:17:58 +01:00
public IdentifierToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Value;
2020-11-19 20:32:34 +01:00
}
public class BracketToken : Token
{
2020-11-24 18:17:58 +01:00
public BracketToken(SourceBuffer sourceBuffer, int start, int length, string value) : base(sourceBuffer, start, length, value) { }
2020-11-24 23:10:41 +01:00
public override object NativeValue => Value[0];
2020-11-19 20:32:34 +01:00
}
}
}