示例#1
0
        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);
        }
示例#2
0
        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());
                }
            }
        }
示例#3
0
 public override void ExitCompoundStatement(CompoundStatementContext context)
 {
     AppendLine("} // compound");
 }
示例#4
0
 public override ASTNode VisitCompoundStatement([NotNull] CompoundStatementContext ctx)
 {
     return(ctx.blockItemList() is null
         ? new BlockStatNode(ctx.Start.Line)
         : this.Visit(ctx.blockItemList()));
 }