Example #1
0
        private AegisIf MatchEElseIf()
        {
            if (tk.Type == TokenType.If)
            {
                Match(TokenType.If);
            }
            else
            {
                Match(TokenType.ElseIf);
            }

            Expr exp = MatchExpr();

            MatchNewline();

            var ai = new AegisIf();

            ai.Exp = exp;


            PushNode(ai);
            curNode.Items = MatchIfBlock().Items;
            ai            = (AegisIf)PopNode();


            return(ai);
        }
Example #2
0
        private AegisIf MatchIf()
        {
            if (tk.Type == TokenType.If)
            {
                Match(TokenType.If);
            }
            else
            {
                Match(TokenType.ElseIf);
            }

            if (fallback)
            {
                return(null);
            }

            if (tk.Type == TokenType.LPar)
            {
                Match(TokenType.LPar);
            }
            Expr exp = MatchExpr();

            if (fallback)
            {
                return(null);
            }
            if (tk.Type == TokenType.RPar)
            {
                Match(TokenType.RPar);
            }

            if (tk.Type == TokenType.NewLine)
            {
                MatchNewline();
            }

            var ai = new AegisIf();

            PushNode(ai);
            curNode.Items = MatchIfBlock().Items;
            ai            = (AegisIf)PopNode();
            ai.Exp        = exp;
            ai.ElseIfs    = new List <AegisIf>();
            while (tk.Type == TokenType.ElseIf)
            {
                ai.ElseIfs.Add(MatchEElseIf());
            }

            if (tk.Type == TokenType.Else)
            {
                Match(TokenType.Else);
                ai.Else = MatchIfBlock();
            }

            Match(TokenType.EndIf);
            Match(TokenType.NewLine);

            return(ai);
        }
Example #3
0
        private void GenIf(AegisIf ai)
        {
            if (ai.Exp.GetType() == typeof(ComposExpr))
            {
                WriteNew("if ");

                Write(TranslateExpr(ai.Exp));

                WriteLine("");
            }
            else
            {
                WriteNew("if (");

                Write(TranslateExpr(ai.Exp));

                WriteLine(")");
            }
            WriteNewLine("{0}", "{");
            tabLevel++;

            GenBlock(ai.Items);

            tabLevel--;
            WriteNewLine("{0}", "}");

            if (ai.ElseIfs != null)
            {
                foreach (AegisIf aii in ai.ElseIfs)
                {
                    GenElseIf(aii);
                }
            }

            if (ai.Else != null && ai.Else.Items.Count > 0)
            {
                WriteNewLine("else");
                if (ai.Else.Items.Count == 1)
                {
                    tabLevel++;

                    GenBlock(ai.Else.Items);

                    tabLevel--;
                }
                else
                {
                    WriteNewLine("{0}", "{");
                    tabLevel++;

                    GenBlock(ai.Else.Items);

                    tabLevel--;
                    WriteNewLine("{0}", "}");
                }
            }
        }
Example #4
0
        private void GenElseIf(AegisIf ai)
        {
            if (ai.Exp.GetType() == typeof(ComposExpr))
            {
                WriteNew("else if ");

                Write(TranslateExpr(ai.Exp));

                WriteLine("");
            }
            else
            {
                WriteNew("else if (");

                Write(TranslateExpr(ai.Exp));

                WriteLine(")");
            }

            if (ai.Items.Count == 1)
            {
                tabLevel++;

                GenBlock(ai.Items);

                tabLevel--;
            }
            else
            {
                WriteNewLine("{0}", "{");
                tabLevel++;

                GenBlock(ai.Items);

                tabLevel--;
                WriteNewLine("{0}", "}");
            }
        }