private static IIntegerReturningStatement ParseFunctionEvalulation(StringAbstraction s, FunctionDefinitionSet functionSet) { var args = new List <StringAbstraction>(s.AfterFirstArrow().Split(",")); return(new CallIntegerReturningFunction(args.Select(x => ParseIntReturningExpression(x, functionSet)).ToList(), functionSet, new FunctionName(s.Split(">")[0].Value()))); }
private static IIntegerReturningStatement ParseSum(StringAbstraction s, FunctionDefinitionSet functionSet) { List <StringAbstraction> args = s.AfterFirstColon().Split(","); IIntegerReturningStatement a = ParseIntReturningExpression(args[0], functionSet); IIntegerReturningStatement b = ParseIntReturningExpression(args[1], functionSet); return(new Sum(a, b)); }
private static IBooleanReturningStatement ParseLessThanCondition(CodeFileAbstraction codeFile, FunctionDefinitionSet functionSet) { StringAbstraction expression = codeFile.GetCurrentLine().AfterFirstColon(); IIntegerReturningStatement smaller = ParseIntReturningExpression(expression.BeforeFirstOccuranceOf("<"), functionSet); IIntegerReturningStatement bigger = ParseIntReturningExpression(expression.AfterFirstOccuranceOf("<"), functionSet); IBooleanReturningStatement condition = new CompareLessThan(smaller, bigger); return(condition); }
private static IIntegerReturningStatement ParseIntReturningExpression(StringAbstraction s, FunctionDefinitionSet functionSet) { if (s.IsNumeric()) { return(s.GetIntValue()); } if (s.Contains(">")) { return(ParseFunctionEvalulation(s, functionSet)); } if (s.StartsWith("sum:")) { return(ParseSum(s, functionSet)); } if (s.StartsWith("-")) { return(new Negation(new IntVariableEvaluation(new VariableName(s.AfterFirstOccuranceOf("-").Value())))); } return(new IntVariableEvaluation(new VariableName(s.Value()))); }
private static void ParseVariableDeclaration(FunctionDefinitionSet functionSet, StringAbstraction s, Block block) { var split = s.Split("="); IIntegerReturningStatement toSetTo = ParseIntReturningExpression(s.AfterFirstOccuranceOf("="), functionSet); block.AddChild(new IntegerAssignment(new VariableName(s.BeforeFirstOccuranceOf("=").ToString()), toSetTo)); }
private void ParseFunctionDefinition(CodeFileAbstraction codeFile, FunctionDefinitionSet functionSet, StringAbstraction s) { List <StringAbstraction> args = new List <StringAbstraction>(codeFile.GetCurrentLine().AfterFirstPipe().Split(",")); Block functionBlock = GetBlock(codeFile, functionSet); functionSet.Add(new FunctionName(s.BeforeFirstOccuranceOf("|").Value()), new IntReturningFunction( functionBlock, ParseIntReturningExpression(codeFile.GetCurrentLine().Replace("return", ""), functionSet), args.Select(x => new VariableName(x.Value())).ToList() )); }