public List <Statement> ParseCompoundStatement(CompoundStatementContext node) { List <Statement> statements = new List <Statement>(); foreach (var child in node.children) { if (child is IfStatementContext @if) { statements.Add(this.ParseIfStatement(@if)); } else if (child is CaseStatementContext @case) { statements.Add(this.ParseCaseStatement(@case)); } else if (child is WhileStatementContext @while) { statements.Add(this.ParseWhileStatement(@while)); } else if (child is LoopStatementContext loop) { statements.Add(this.ParseLoopStatement(loop)); } else if (child is ReturnStatementContext returnStatement) { statements.Add(this.ParseReturnStatement(returnStatement)); } else if (child is BlockStatementContext block) { statements.AddRange(this.ParseBlockStatement(block)); } else if (child is LeaveStatementContext leave) { statements.Add(this.ParseLeaveStatement(leave)); } else if (child is OpenCursorContext openCursor) { statements.Add(this.ParseOpenCursorSatement(openCursor)); } else if (child is FetchCursorContext fetchCursor) { statements.Add(this.ParseFetchCursorSatement(fetchCursor)); } else if (child is CloseCursorContext closeCursor) { statements.Add(this.ParseCloseCursorSatement(closeCursor)); } } return(statements); }
private void ParseCompoundStatement(CompoundStatementContext node) { foreach (var child in node.children) { if (child is WhileStatementContext whileStatement) { foreach (var whileChild in whileStatement.children) { if (whileChild is TerminalNodeImpl terminalNode) { string text = terminalNode.GetText(); if (terminalNode.Symbol.Type == MySqlParser.DO) { text += Environment.NewLine; } this.Write(text, indent); } else if (whileChild is ProcedureSqlStatementContext procedure) { this.ParseProcedureStatement(procedure); } else if (whileChild is PredicateExpressionContext exp) { this.ParsePredicateExpression(exp); } } } else if (child is ReturnStatementContext returnStatement) { this.ParseReturnStatement(returnStatement); } else if (child is TerminalNodeImpl terminalNode) { this.WriteLine(terminalNode.GetText()); } } }
public override void ExitCompoundStatement(CompoundStatementContext context) { AppendLine("} // compound"); }
public override ASTNode VisitCompoundStatement([NotNull] CompoundStatementContext ctx) { return(ctx.blockItemList() is null ? new BlockStatNode(ctx.Start.Line) : this.Visit(ctx.blockItemList())); }