...
This commit is contained in:
@@ -2,18 +2,38 @@
|
||||
|
||||
namespace NubLang.Syntax;
|
||||
|
||||
public abstract record Token(SourceSpan Span);
|
||||
|
||||
public record IdentifierToken(SourceSpan Span, string Value) : Token(Span)
|
||||
public abstract class Token(SourceSpan span)
|
||||
{
|
||||
public SourceSpan Span { get; } = span;
|
||||
}
|
||||
|
||||
public class WhitespaceToken(SourceSpan span) : Token(span);
|
||||
|
||||
public class CommentToken(SourceSpan span, string comment) : Token(span)
|
||||
{
|
||||
public string Comment { get; } = comment;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "// " + Comment;
|
||||
}
|
||||
}
|
||||
|
||||
public class IdentifierToken(SourceSpan span, string value) : Token(span)
|
||||
{
|
||||
public string Value { get; } = value;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Value;
|
||||
}
|
||||
}
|
||||
|
||||
public record IntLiteralToken(SourceSpan Span, string Value, int Base) : Token(Span)
|
||||
public class IntLiteralToken(SourceSpan span, string value, int @base) : Token(span)
|
||||
{
|
||||
public string Value { get; } = value;
|
||||
public int Base { get; } = @base;
|
||||
|
||||
private string GetNumericValue()
|
||||
{
|
||||
return Base switch
|
||||
@@ -43,24 +63,30 @@ public record IntLiteralToken(SourceSpan Span, string Value, int Base) : Token(S
|
||||
}
|
||||
}
|
||||
|
||||
public record StringLiteralToken(SourceSpan Span, string Value) : Token(Span)
|
||||
public class StringLiteralToken(SourceSpan span, string value) : Token(span)
|
||||
{
|
||||
public string Value { get; } = value;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"\"{Value}\"";
|
||||
}
|
||||
}
|
||||
|
||||
public record BoolLiteralToken(SourceSpan Span, bool Value) : Token(Span)
|
||||
public class BoolLiteralToken(SourceSpan span, bool value) : Token(span)
|
||||
{
|
||||
public bool Value { get; } = value;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Value ? "true" : "false";
|
||||
}
|
||||
}
|
||||
|
||||
public record FloatLiteralToken(SourceSpan Span, string Value) : Token(Span)
|
||||
public class FloatLiteralToken(SourceSpan span, string value) : Token(span)
|
||||
{
|
||||
public string Value { get; } = value;
|
||||
|
||||
public float AsF32 => Convert.ToSingle(Value);
|
||||
public double AsF64 => Convert.ToDouble(Value);
|
||||
|
||||
@@ -134,8 +160,10 @@ public enum Symbol
|
||||
QuestionMark,
|
||||
}
|
||||
|
||||
public record SymbolToken(SourceSpan Span, Symbol Symbol) : Token(Span)
|
||||
public class SymbolToken(SourceSpan span, Symbol symbol) : Token(span)
|
||||
{
|
||||
public Symbol Symbol { get; } = symbol;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Symbol switch
|
||||
@@ -189,7 +217,6 @@ public record SymbolToken(SourceSpan Span, Symbol Symbol) : Token(Span)
|
||||
Symbol.Pipe => "|",
|
||||
Symbol.At => "@",
|
||||
Symbol.QuestionMark => "?",
|
||||
Symbol.Tilde => "~",
|
||||
_ => "none",
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user