Exemplo n.º 1
0
        internal override bool TryGetToken(ref string text, out TokenBase token, bool requireReturnValue = true)
        {
            token = null;
            string temp = text;
            var    op   = default(Operator);

            if (temp.Length < 2)
            {
                return(false);
            }
            if (temp[0] != '=')
            {
                if (temp[1] != '=' || temp.Length < 3)
                {
                    return(false);
                }
                for (int i = (int)Operator.Multiply; i <= (int)Operator.Subtract; ++i)
                {
                    if (EquationTokenizer.representations[i][0] == temp[0])
                    {
                        op = (Operator)i;
                    }
                }
                for (int i = (int)Operator.BitwiseAnd; i <= (int)Operator.BitwiseXor; ++i)
                {
                    if (EquationTokenizer.representations[i][0] == temp[0])
                    {
                        op = (Operator)i;
                    }
                }
                if (op == default(Operator))
                {
                    return(false);
                }
            }

            if (op == default(Operator))
            {
                temp = temp.Substring(1).TrimStart();
            }
            else
            {
                temp = temp.Substring(2).TrimStart();
            }
            TokenBase valToken;

            if (!EquationTokenizer.TryEvaluateExpression(temp, out valToken))
            {
                return(false);
            }
            text  = "";
            token = new AssignmentToken()
            {
                Value = valToken, Operator = op
            };
            return(true);
        }
Exemplo n.º 2
0
        internal override bool TryGetToken(ref string text, out TokenBase token)
        {
            token = null;
            string temp = text;

            if (temp.Length == 0 || (!Char.IsLetter(temp[0]) && temp[0] != '_'))
            {
                return(false);
            }
            int count = 1;

            while (count < temp.Length && (Char.IsLetterOrDigit(temp[count]) || temp[count] == '_'))
            {
                ++count;
            }
            string name = temp.Substring(0, count);

            MemberInfo info = null;

            if (type != null)
            {
                info = type.GetMember(name).FirstOrDefault();
                if (info == null)
                {
                    return(false);
                }
            }
            else
            {
                string    nameTemp = "$" + name;
                TokenBase tokenTemp;
                if (!new ParameterToken().TryGetToken(ref nameTemp, out tokenTemp))
                {
                    return(false);
                }
            }

            temp = temp.Substring(count).TrimStart();
            if (temp.Length == 0 || temp[0] != '=')
            {
                return(false);
            }
            temp = temp.Substring(1).TrimStart();
            TokenBase valToken;

            if (!EquationTokenizer.TryEvaluateExpression(temp, out valToken))
            {
                return(false);
            }
            text  = "";
            token = new AssignmentToken(null)
            {
                Name = name, Member = info, Value = valToken
            };
            return(true);
        }