예제 #1
0
        public Token(string value, TokenType type, LiteralTokenType literalType, ISourceLocation source)
        {
            Type        = type;
            LiteralType = literalType;
            Value       = value;

            if (source != null)
            {
                Line   = source.Line;
                Column = source.Column - (value?.Length ?? 0);
            }
        }
예제 #2
0
        static TDataType ConvertToDataType <TDataType>(LiteralTokenType tokenType)
            where TDataType : class, IDataType <DataType>
        {
            ILiteralToken literalToken = TestCommon.MakeLiteralToken(tokenType);
            var           dataType     = ((ICalcEngine)CalcEngine.Instance).ConvertToDataType(literalToken, null);

            dataType.Should().NotBeNull();
            dataType.Should().BeOfType <TDataType>();
            var typedDataType = dataType as TDataType;

            typedDataType.Should().NotBeNull();
            return(typedDataType);
        }
예제 #3
0
        static TToken MakeToken <TToken>(LiteralTokenType tokenType, string value = "")
            where TToken : class, ILiteralToken
        {
            var token = string.IsNullOrWhiteSpace(value)
                ? TestCommon.MakeLiteralToken(tokenType)
                : TestCommon.MakeLiteralToken(tokenType, value);

            token.Should().NotBeNull();
            token.Should().BeOfType <TToken>();
            var typedToken = token as TToken;

            typedToken.Should().NotBeNull();
            return(typedToken);
        }
예제 #4
0
        public static ILiteralToken MakeLiteralToken(this LiteralTokenType tokenType, string value = null)
        {
            switch (tokenType)
            {
            case LiteralTokenType.Date:
                return(string.IsNullOrEmpty(value)
                        ? DateToken.Now
                        : MakeLiteralToken($"date {value}"));

            case LiteralTokenType.Float:
                return(string.IsNullOrEmpty(value)
                        ? FloatToken.One
                        : MakeLiteralToken($"float {value}"));

            case LiteralTokenType.LimitedInteger:
                return(string.IsNullOrEmpty(value)
                        ? LimitedIntegerToken.One
                        : MakeLiteralToken($"limitedinteger {value}"));

            case LiteralTokenType.Time:
                return(string.IsNullOrEmpty(value)
                        ? TimeToken.One
                        : MakeLiteralToken($"time {value}"));

            case LiteralTokenType.Timespan:
                return(string.IsNullOrEmpty(value)
                        ? TimespanToken.One
                        : MakeLiteralToken($"timespan {value}"));

            case LiteralTokenType.UnlimitedInteger:
                return(string.IsNullOrEmpty(value)
                        ? UnlimitedIntegerToken.One
                        : MakeLiteralToken($"unlimitedinteger {value}"));

            default:
                throw new TestOperationException($"Unsupported literal token type {tokenType}");
            }
        }
 internal LiteralToken(LiteralTokenType literalType, string sourcePath, BufferPosition position)
     : base(TokenType.Literal, sourcePath, position)
 {
     _literalType = literalType;
 }
예제 #6
0
 protected LiteralToken(LiteralTokenType literalTokenType, TBaseType typedValue, string rawToken, SourcePosition position)
     : base(rawToken, position)
 {
     LiteralType = literalTokenType;
     TypedValue  = typedValue;
 }
예제 #7
0
 internal LiteralToken(LiteralTokenType literalType, string sourcePath, BufferPosition position)
     : base(TokenType.Literal, sourcePath, position)
 {
     _literalType = literalType;
 }
예제 #8
0
 /// <summary>
 /// Creates a string literal token with a given <paramref name="value"/>.
 /// </summary>
 /// <param name="value">The value to associate with this token.</param>
 /// <param name="literalType">The <see cref="LiteralTokenType"/> of this <see cref="Token"/>.</param>
 /// <param name="location">The <see cref="ISourceLocation"/> of this <see cref="Token"/>, used for exception generation purposes.</param>
 /// <returns>A string literal token with the given value.</returns>
 public static Token LiteralValue(string value, LiteralTokenType literalType, ISourceLocation location)
 {
     return(new Token(value, TokenType.LiteralValue, literalType, location));
 }