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); }
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); }
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}", "}"); } } }
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}", "}"); } }