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);
        }
Beispiel #2
0
 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)));
 }