Exemplo n.º 1
0
        private Exp GetExp()
        {
            Token operatorToken = _remainedTokens.Pop();
            bool  isComposite   = operatorToken.Type == TokenType.LeftBracket;

            if (isComposite)
            {
                operatorToken = _remainedTokens.Pop();
            }
            bool againLeftBracket = operatorToken.Type == TokenType.LeftBracket;

            Exp exp;

            if (againLeftBracket)
            {
                exp = new FuncExp();
                _remainedTokens.Push(new Token(TokenType.LeftBracket, "("));
                var functionToEvaluate = GetExp();
                exp.Children.Add(functionToEvaluate);
            }
            else
            {
                exp = GetExpInstance(operatorToken);
            }

            if (isComposite)
            {
                List <Exp> children = GetChildren(_remainedTokens);
                exp.Children.AddRange(children);
            }

            return(exp);
        }
Exemplo n.º 2
0
        private Exp ComposeExpression(FuncExp exp, Dictionary <string, DefineExp> context)
        {
            Exp funcToEvaluate = exp.Children[0];

            if (funcToEvaluate is IfExp)
            {
                Exp composedExp = CalculateIf((IfExp)funcToEvaluate, context);
                composedExp.Children.AddRange(exp.Children.Skip(1));
                return(composedExp);
            }

            throw new NotImplementedException("ComposeExpression only supports if right now");
        }