Save position and length of tokens
This commit is contained in:
@@ -7,15 +7,30 @@
|
||||
using namespace std;
|
||||
|
||||
class IToken{
|
||||
unsigned int Position;
|
||||
unsigned int Length;
|
||||
public:
|
||||
virtual TokenKind GetKind() = 0;
|
||||
|
||||
IToken(unsigned int position, unsigned int length){
|
||||
Position = position;
|
||||
Length = length;
|
||||
}
|
||||
|
||||
unsigned int GetStartPosition(){
|
||||
return Position;
|
||||
}
|
||||
|
||||
unsigned int GetEndPosition(){
|
||||
return Position + Length - 1;
|
||||
}
|
||||
};
|
||||
|
||||
class SimpleToken : public IToken{
|
||||
public:
|
||||
TokenKind Kind;
|
||||
|
||||
explicit SimpleToken(TokenKind type){
|
||||
explicit SimpleToken(TokenKind type, unsigned int position, unsigned int length) : IToken(position, length){
|
||||
Kind = type;
|
||||
}
|
||||
|
||||
@@ -28,7 +43,7 @@ class IntegerToken : public IToken{
|
||||
public:
|
||||
long Value;
|
||||
|
||||
explicit IntegerToken(long value){
|
||||
explicit IntegerToken(long value, unsigned int position, unsigned int length) : IToken(position, length){
|
||||
Value = value;
|
||||
}
|
||||
|
||||
@@ -41,7 +56,7 @@ class FloatToken : public IToken{
|
||||
public:
|
||||
double Value;
|
||||
|
||||
explicit FloatToken(double value){
|
||||
explicit FloatToken(double value, unsigned int position, unsigned int length) : IToken(position, length){
|
||||
Value = value;
|
||||
}
|
||||
|
||||
@@ -54,7 +69,7 @@ class IdentifierToken : public IToken{
|
||||
public:
|
||||
string Value;
|
||||
|
||||
explicit IdentifierToken(string value){
|
||||
explicit IdentifierToken(string value, unsigned int position, unsigned int length) : IToken(position, length){
|
||||
Value = std::move(value);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user