public List <Statement> ParseBlockStatement(BlockStatementContext node) { List <Statement> statements = new List <Statement>(); foreach (var bc in node.children) { if (bc is DeclareVariableContext declare) { statements.Add(this.ParseDeclareStatement(declare)); } else if (bc is ProcedureSqlStatementContext procStatement) { statements.AddRange(this.ParseProcedureStatement(procStatement)); } else if (bc is DeclareCursorContext cursor) { statements.Add(this.ParseDeclareCursor(cursor)); } else if (bc is DeclareHandlerContext handler) { statements.Add(this.ParseDeclareHandler(handler)); } } return(statements); }
private void ParseFunction(CreateFunctionContext node) { FullIdContext id = node.fullId(); UidContext[] uids = id.uid(); List <string> names = new List <string>(); foreach (UidContext uid in uids) { string name = uid.simpleId().GetText(); names.Add(name); } this.WriteKeyValue("Function", string.Join(".", names)); this.WriteBeginBrace(); string dataType = node.dataType().GetText(); this.WriteKeyValue("dataType", dataType); FunctionParameterContext[] parameters = node.functionParameter(); foreach (FunctionParameterContext parameter in parameters) { string name = parameter.uid().GetText(); string paraDataType = parameter.dataType().GetText(); this.WriteKeyValue("parameter", $"{name} {paraDataType}"); } RoutineBodyContext body = node.routineBody(); this.WriteLine("body"); this.WriteBeginBrace(2); this.indent = 4; BlockStatementContext block = body.blockStatement(); foreach (IParseTree blockChild in block.children) { if (blockChild is ProcedureSqlStatementContext procedure) { this.ParseProcedureStatement(procedure); } else { string text = blockChild.GetText(); this.WriteLine(text, indent); } } this.WriteEndBrace(2); this.WriteEndBrace(); }
private void HandloBlockStatementContent(CodeBlock inCodeBlock, BlockStatementContext inBlockStatement) { var tmpVar = inBlockStatement.localVariableDeclaration(); if (tmpVar != null) { HandleLocalVariableDeclarationContext(inCodeBlock, tmpVar); } var tmpType = inBlockStatement.localTypeDeclaration(); if (tmpType != null) { throw new NotImplementedException("Not done yet"); } var tmpStatement = inBlockStatement.statement(); if (tmpStatement != null) { HandleBlockStatementStatement(inCodeBlock, inBlockStatement.statement()); } }