コード例 #1
0
        internal override bool TryGetToken(ref string text, out TokenBase token, bool requireReturnValue = true)
        {
            token = null;
            bool inQuotes = false;
            int  brackets = 0;
            int  i        = 0;

            while (true)
            {
                if (i >= text.Length)
                {
                    return(false);
                }
                if (i > 0 && text[i] == '\'' && text[i - 1] != '\\')
                {
                    inQuotes = !inQuotes;
                }
                else if (!inQuotes)
                {
                    if (text[i] == '(')
                    {
                        ++brackets;
                    }
                    else if (text[i] == ')')
                    {
                        --brackets;
                        if (brackets == 0)
                        {
                            break;
                        }
                    }
                }
                ++i;
            }
            string temp = text.Substring(1, i - 1);

            var tuple = GetNameMatches(temp, null, null).Where(tup => tup.Item1 is Type).Reverse().FirstOrDefault();

            if (tuple == null)
            {
                return(false);
            }

            temp = text.Substring(i + 1).TrimStart();
            TokenBase valToken = null;

            if (parseTarget && !EquationTokenizer.TryGetValueToken(ref temp, out valToken))
            {
                return(false);
            }
            text  = temp;
            token = new TypeCastToken()
            {
                TargetType = tuple.Item1 as Type, Target = valToken
            };
            return(true);
        }
コード例 #2
0
        internal override bool TryGetToken(ref string text, out TokenBase token, bool requireReturnValue = true)
        {
            token = null;
            if (text.Length == 0)
            {
                return(false);
            }
            Operator op;

            if (text[0] == '!')
            {
                op = Operator.Not;
            }
            else if (text[0] == '+')
            {
                op = Operator.Positive;
            }
            else if (text[0] == '-')
            {
                op = Operator.Negative;
            }
            else
            {
                return(false);
            }
            TokenBase valToken;
            string    temp = text.Substring(1).TrimStart();

            if (!EquationTokenizer.TryGetValueToken(ref temp, out valToken))
            {
                return(false);
            }
            token = new UnaryOperatorToken()
            {
                operation = op, value = valToken
            };
            text = temp;
            return(true);
        }
コード例 #3
0
ファイル: ThrowToken.cs プロジェクト: CreateIdea/BI_Wizard
        internal override bool TryGetToken(ref string text, out TokenBase token)
        {
            token = null;
            if (!text.StartsWith("throw"))
            {
                return(false);
            }
            string temp = text.Substring(5).TrimStart();

            TokenBase valToken = null;

            if (!EquationTokenizer.TryGetValueToken(ref temp, out valToken))
            {
                return(false);
            }

            text  = temp;
            token = new ThrowToken()
            {
                Exception = valToken
            };
            return(true);
        }