Esempio n. 1
0
        private bool buildVariableExpression(FunctionExpression function)
        {
            if (!lexer.Next() || lexer.LastResult.Token != StandardTokenType.Symbol)
            {
                return(function.Invalidate("Internal parsing error: Was expecting a variable name."));
            }

            function.Enqueue(new VariableExpression(lexer.LastResult.Content));

            if (!lexer.Next() || lexer.LastResult.Token != StandardTokenType.CloseCurlyBraces)
            {
                return(function.Invalidate("Internal parsing error: Was expecting a '}'."));
            }

            return(true);
        }
Esempio n. 2
0
        public FunctionExpressionWalker(ExternalVariables parserVariables, FunctionExpression function)
        {
            if (function == null)
            {
                throw new ArgumentNullException();
            }

            if (!function.IsValid)
            {
                throw new ArgumentException("Function must be valid.");
            }

            processStack    = function.InstructionsInstance;
            ParserVariables = parserVariables;
            ValueStack      = new Stack <VauleExpression>();
            Results         = new Queue <VauleExpression>();
        }
Esempio n. 3
0
        private bool buildOperationalExpression(string symbol, FunctionExpression function)
        {
            Func <IOperatorExpression> operationExpression;

            if (operatorLookup.TryGetValue(symbol, out operationExpression))
            {
                function.Enqueue(operationExpression.Invoke());
            }
            else
            {
                function.Enqueue(new VauleExpression.StringVauleExpression(symbol));
            }

            return(true);

            //walker.Fail(string.Format("Internal parsing error: Invaild operational expression \"{0}\".", symbol));
            //return false;
        }
Esempio n. 4
0
        private bool buildExpression(FunctionExpression function)
        {
            switch ((StandardTokenType)lexer.LastResult.Token)
            {
            case StandardTokenType.Quotes:
                function.Enqueue(new VauleExpression.StringVauleExpression(lexer.LastResult.Content));
                return(true);

            case StandardTokenType.Float:
                float floatNumber;
                if (float.TryParse(lexer.LastResult.Content, out floatNumber))
                {
                    function.Enqueue(new VauleExpression.FloatVauleExpression(floatNumber));
                    return(true);
                }
                else
                {
                    return(function.Invalidate("Internal parsing error: Was expecting a float."));
                }

            case StandardTokenType.Int:
                int IntNumber;
                if (int.TryParse(lexer.LastResult.Content, out IntNumber))
                {
                    function.Enqueue(new VauleExpression.IntVauleExpression(IntNumber));
                    return(true);
                }
                else
                {
                    return(function.Invalidate("Internal parsing error: Was expecting a int."));
                }

            case StandardTokenType.True:
                function.Enqueue(new VauleExpression.BooleanVauleExpression(true));
                return(true);

            case StandardTokenType.False:
                function.Enqueue(new VauleExpression.BooleanVauleExpression(false));
                return(true);

            case StandardTokenType.Symbol:
                return(buildOperationalExpression(lexer.LastResult.Content, function));

            case StandardTokenType.Dot:
                return(true);

            case StandardTokenType.OpenParentheses:
                function.Enqueue(new ParenthesesExpression(true));
                return(true);

            case StandardTokenType.CloseParentheses:
                function.Enqueue(new ParenthesesExpression(false));
                return(true);

            case StandardTokenType.OpenCurlyBraces:
                return(buildVariableExpression(function));

            //walker.ProcessStack.Enqueue(new CurlyBracesExpression(true));
            //return true;
            case StandardTokenType.CloseCurlyBraces:
                //walker.ProcessStack.Enqueue(new CurlyBracesExpression(false));
                //return true;
                return(function.Invalidate("Internal parsing error: Was expecting a '{'."));

            case StandardTokenType.Space:
                return(true);

            default:
                return(function.Invalidate("Internal parsing error: Unexpected token."));
            }
        }