Exemple #1
0
        /// <summary>
        /// Inline an iteration statement.
        /// </summary>
        /// <param name="iterationStatement">The iteration to inline.</param>
        /// <returns>A set of statements that represents an iteration.</returns>
        private List <Statement> InlineIteration(IterationStatement iterationStatement)
        {
            var newStatements = new List <Statement>();

            var startIteration = CreateNewLabel();
            var endIteration   = CreateNewLabel();

            _iterationEndLabels.Push(endIteration);

            newStatements.Add(startIteration);
            if (!iterationStatement.ConditionAfterBody)
            {
                newStatements.Add(new LabelConditionStatement(OptimizeExpression(iterationStatement.Condition), endIteration.Name.Identifier));
            }
            newStatements.AddRange(OptimizeStatementBlock(iterationStatement.Statements));
            if (iterationStatement.ConditionAfterBody)
            {
                newStatements.Add(new LabelConditionStatement(OptimizeExpression(iterationStatement.Condition), endIteration.Name.Identifier));
            }
            newStatements.Add(new GoToLabelStatement(startIteration.Name.Identifier));
            newStatements.Add(endIteration);

            _iterationEndLabels.Pop();

            return(newStatements);
        }
    static void Main12()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnForLoops();
        iterationStatement.LearnWhileLoops();
    }
Exemple #3
0
        /// <summary>
        /// Generates the code for a <see cref="IterationStatement"/>.
        /// </summary>
        /// <param name="statement">The statement</param>
        /// <returns>A BaZic code</returns>
        private string GenerateIterationStatement(IterationStatement statement)
        {
            Requires.NotNull(statement.Condition, nameof(statement.Condition));

            var condition = GenerateExpression(statement.Condition);

            var indent = IncreaseIndent();

            var statements = new List <string>();

            foreach (var stmt in statement.Statements)
            {
                statements.Add($"{indent}{GenerateStatement(stmt)}");
            }

            var statementsString = string.Join(Environment.NewLine, statements);

            indent = DecreaseIndent();

            if (statement.ConditionAfterBody)
            {
                return($"DO" + Environment.NewLine +
                       $"{statementsString}" + Environment.NewLine +
                       $"{indent}LOOP WHILE {condition}");
            }
            else
            {
                return($"DO WHILE {condition}" + Environment.NewLine +
                       $"{statementsString}" + Environment.NewLine +
                       $"{indent}LOOP");
            }
        }
Exemple #4
0
    static void Main3()
    {
        IterationStatement obj2 = new IterationStatement();

        obj2.LearnForLoop();
        obj2.LearnWhile();
    }
Exemple #5
0
 static Statement()
 {
     Declaration = new DeclarationStatement();
     Jump        = new JumpStatement();
     Selection   = new SelectionStatement();
     Iteration   = new IterationStatement();
     Expression  = new ExpressionStatement();
 }
Exemple #6
0
    static void Main111()
    {
        IterationStatement it = new IterationStatement();

        // it.LearnForLoops();
        it.LearnWhileLoops();
        Person person = new Person();

        person.Age = 34;
    }
    static void Main4()
    {
        SelectionStatement s1 = new SelectionStatement();
        // s1.LearnIfElse();
        // s1.LearnSwitch();
        IterationStatement i1 = new IterationStatement();

        i1.LearnForLoop();
        i1.LearnWhileLoop();
    }
Exemple #8
0
    static void Main()
    {
        IterationStatement IterationStatementObj = new IterationStatement();

        IterationStatementObj.ForLoop();

        Person person = new Person();

        person.Age = 34;
    }
        public void CSharpCodeGenerator_Iteration_Empty()
        {
            var statement = new IterationStatement();
            var generator = new CSharpCodeGenerator();
            var result    = generator.Write(statement);

            Assert.That.StringEquals(@"for (; ; )
{
}
", result);
        }
Exemple #10
0
    static void Main4488()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnWhileLoops();

        AccessModifier accessModifier = new AccessModifier();

        accessModifier.DoAnotherThing();

        Person person = new Person();

        person.SetAge(34);
    }
Exemple #11
0
    static void Main6()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnWhileLoops();

        AccessModifier accessModifier = new AccessModifier();

        accessModifier.DoSomething();

        Person person = new Person();

        person.age = 34;
    }
Exemple #12
0
        public void Construct(CommonTree syntaxFor)
        {
            //Initialization
            var syntaxForInitialization = syntaxFor.GetChild(0).CastTo<CommonTree>();
            if (syntaxForInitialization.ChildCount > 0)
            {
                //TODO: IMPLEMENT / FIX THIS
                syntaxForInitialization.Children.Cast<CommonTree>()
                    .ForEach(syntaxVarDeclarationOrAssignment =>
                    {
                        InitializationStatement =
                            TreeHelper.GetStatements(this, Scope, syntaxVarDeclarationOrAssignment).First();
                        InitializationStatement.Construct(syntaxVarDeclarationOrAssignment);
                    });
            }

            //Condition
            var syntaxForCondition = syntaxFor.GetChild(1).CastTo<CommonTree>();
            if (syntaxForCondition.ChildCount > 0)
            {
                syntaxForCondition.Children.Cast<CommonTree>()
                    .ForEach(syntaxBoolExpression =>
                    {
                        ConditionExpression = TreeHelper.GetExpression(this, Scope, syntaxBoolExpression);
                        ConditionExpression.Construct(syntaxBoolExpression);
                    });
            }

            //Iteration
            var syntaxForIteration = syntaxFor.GetChild(2).CastTo<CommonTree>();
            if (syntaxForIteration.ChildCount > 0)
            {
                syntaxForIteration.Children.Cast<CommonTree>()
                    .ForEach(syntaxVarAssignment =>
                    {
                        IterationStatement = TreeHelper.GetStatements(this, Scope, syntaxVarAssignment).First();
                        //if(iterationExpression is Varial)
                        IterationStatement.Construct(syntaxVarAssignment);
                    });
            }


            //Block
            if (syntaxFor.ChildCount > 3)
            {
                var syntaxForBlock = syntaxFor.GetChild(3).CastTo<CommonTree>();
                BlockOrSingleStatement = TreeHelper.GetStatements(this, Scope, syntaxForBlock).First();
                BlockOrSingleStatement.Construct(syntaxForBlock);
            }
        }
        public void CSharpCodeGenerator_Iteration()
        {
            var statement = new IterationStatement();
            var variable  = new VariableDeclarationStatement(null, "i", 0);

            statement.Initialization     = variable;
            statement.Condition          = new BinaryExpression(BinaryOperator.LessThan, variable, 10);
            statement.IncrementStatement = new UnaryExpression(UnaryOperator.PostIncrement, variable);
            statement.Body = new MethodInvokeExpression(
                new MemberReferenceExpression(new TypeReference("Console"), "Write"),
                variable);

            var generator = new CSharpCodeGenerator();
            var result    = generator.Write(statement);

            Assert.That.StringEquals(@"for (var i = 0; (i < 10); (i++))
{
    Console.Write(i);
}
", result);
        }
Exemple #14
0
        private Statement ParseForStatement(ILabelSet labelSet)
        {
            var startPosition         = Lookahead.StartPosition;
            IterationStatement result = null;

            Match(TokenType.For);
            Match(TokenType.LParenthesis);
            var isVariableDeclaration = false;

            if (Lookahead.Type == TokenType.Var)
            {
                ReadNextToken();
                isVariableDeclaration = true;
            }
            if (Lookahead.Type == TokenType.Ident)
            {
                var variableName = Lookahead.Value;
                if (PeekNextToken().Type == TokenType.In)
                {
                    MoveForwardLookahead();
                    if (isVariableDeclaration)
                    {
                        if (!_currentFunction.DeclaredVariables.Contains(variableName))
                        {
                            _currentFunction.DeclaredVariables.Add(variableName);
                        }
                    }
                    result = new ForInStatement(startPosition.LineNo, variableName, ParseExpression(), labelSet);
                }
            }
            if (result == null)
            {
                Expression initialization = null;
                if (isVariableDeclaration)
                {
                    initialization = ParseVariableDeclarationList();
                }
                else
                {
                    if (Lookahead.Type != TokenType.Semicolon)
                    {
                        initialization = ParseExpression();
                    }
                }
                Match(TokenType.Semicolon);
                Expression condition = null;
                if (Lookahead.Type != TokenType.Semicolon)
                {
                    condition = ParseExpression();
                }
                Match(TokenType.Semicolon);
                Expression increment = null;
                if (Lookahead.Type != TokenType.RParenthesis)
                {
                    increment = ParseExpression();
                }
                result = new ForStatement(startPosition.LineNo, initialization, condition, increment, labelSet);
            }
            Match(TokenType.RParenthesis);
            result.Statement = ParseStatement(true);
            return(result);
        }
Exemple #15
0
    static void Main232()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnWhileLoop();
    }
Exemple #16
0
    static void Main456()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnForLoops();
    }
Exemple #17
0
 public void SetUp()
 {
     _control = new IterationStatement();
 }
    static void Main12345()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnWhileloop();
    }
Exemple #19
0
    static void Main()
    {
        IterationStatement s = new IterationStatement();

        s.LearnWhileLoop();
    }
Exemple #20
0
    static void Main5()
    {
        IterationStatement i = new IterationStatement();

        i.LearnWhileLoop();
    }
    static void Main3()
    {
        IterationStatement iteration = new IterationStatement();

        iteration.LearnForLoop();
    }
Exemple #22
0
 public static void ResolveIterationStatement(IterationStatement iterationStatement, Table.Table table)
 {
     ResolveExpression(iterationStatement.Condition, table);
     ResolveEmbeddedStatement((EmbeddedStatement)iterationStatement.Body, table);
 }
    static void Main231()
    {
        IterationStatement iterationStatement = new IterationStatement();

        iterationStatement.LearnForLoop();
    }
    // Pascal casing : IterationStatement for method and class
    // camel Case: iterationStatement for variable

    static void Main1()
    {
        IterationStatement interationStatement = new IterationStatement();

        interationStatement.LearnWhileLoops();
    }
Exemple #25
0
        // [40] IterationStatement = 'while' '(' Expression ')' Statement |
        // 'do' Statement 'while' '(' Expression ')' ';' | 'for' '(' ExpressionStatement ExpressionStatement [Expression] ')' Statement.
        private bool IsIterationStatement(out IterationStatement iterationStatement)
        {
            iterationStatement = new IterationStatement();
            if (CheckToken(SyntaxKind.WhileKeyword))
            {
                if (!CheckToken(SyntaxKind.OpenBraceToken))
                {
                    return(false);
                }
                if (!IsExpression(out var expression))
                {
                    return(false);
                }
                if (!CheckToken(SyntaxKind.ClosingBraceToken))
                {
                    return(false);
                }
                if (!IsStatement(out var statement))
                {
                    return(false);
                }

                return(true);
            }
            else if (CheckToken(SyntaxKind.DoKeyword))
            {
                if (!IsStatement(out var statement))
                {
                    return(false);
                }
                if (!CheckToken(SyntaxKind.WhileKeyword))
                {
                    return(false);
                }
                if (!CheckToken(SyntaxKind.OpenBraceToken))
                {
                    return(false);
                }
                if (!IsExpression(out var expression))
                {
                    return(false);
                }
                if (!CheckToken(SyntaxKind.ClosingBraceToken))
                {
                    return(false);
                }
                if (!CheckToken(SyntaxKind.SemiColonToken))
                {
                    return(false);
                }

                return(true);
            }
            else if (CheckToken(SyntaxKind.ForKeyword))
            {
                if (!CheckToken(SyntaxKind.OpenBraceToken))
                {
                    return(false);
                }
                if (!IsExpressionStatement(out var expressionStatement))
                {
                    return(false);
                }
                if (!IsExpressionStatement(out var expressionStatement1))
                {
                    return(false);
                }
                if (IsExpression(out var expression))
                {
                    ;
                }
                if (!CheckToken(SyntaxKind.ClosingBraceToken))
                {
                    return(false);
                }
                if (!IsStatement(out var statement))
                {
                    return(false);
                }

                return(true);
            }

            return(false);
        }
Exemple #26
0
    static void Main2()
    {
        IterationStatement i1 = new IterationStatement();

        i1.LearnForLoop();
    }