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); }
static void Main(string[] args) { while (true) { Console.WriteLine("What program would you like to run?"); CodeFileAbstraction codeFile = new CodeFileAbstraction(new List <string>(File.ReadAllLines(Console.ReadLine() + ".txt"))); FunctionDefinitionSet functionSet = new FunctionDefinitionSet(); BlockParser blockParser = new BlockParser(); blockParser.GetBlock(codeFile, functionSet).execute(new Context()); } }
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() )); }
public Block GetBlock(CodeFileAbstraction codeFile, FunctionDefinitionSet functionSet) { Block block = new Block(); StringAbstraction s; Block functionBlock; List <StringAbstraction> args; while (true) { s = codeFile.getNextLine(); var a = s.Value(); if (s.Contains("|")) { ParseFunctionDefinition(codeFile, functionSet, s); continue; } if (s.StartsWith("print:")) { ParsePrint(codeFile, functionSet, block); continue; } if (s.Value().Equals("end") || s.StartsWith("return")) { return(block); } if (s.Contains("=")) { ParseVariableDeclaration(functionSet, s, block); continue; } if (s.StartsWith("while:")) { ParseWhileLoop(codeFile, functionSet, block); continue; } if (s.StartsWith("if:")) { ParseIf(codeFile, functionSet, block); continue; } } }
private void ParseWhileLoop(CodeFileAbstraction codeFile, FunctionDefinitionSet functionSet, Block block) { var condition = ParseLessThanCondition(codeFile, functionSet); block.AddChild(new WhileLoop(condition, GetBlock(codeFile, functionSet))); }
private static void ParsePrint(CodeFileAbstraction codeFile, FunctionDefinitionSet functionSet, Block block) { block.AddChild( new PrintIntegerReturningStatement(ParseIntReturningExpression(codeFile.GetCurrentLine().AfterFirstColon(), functionSet))); }