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); }
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"); }