Beispiel #1
0
        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();
        }
Beispiel #3
0
        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());
            }
        }