ProgrammingLanguageNr1.Parser.functionDeclaration C# (CSharp) Method

functionDeclaration() private method

private functionDeclaration ( ) : ProgrammingLanguageNr1.AST
return ProgrammingLanguageNr1.AST
        private AST functionDeclaration()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("function declaration");
            #endif

            if (m_isInsideFunctionDefinition) {
                throw new Error("Trying to define a function inside a function (are you missing the END word?)", Error.ErrorType.SYNTAX,
                    lookAhead(1).LineNr, lookAhead(1).LinePosition);
            } else {
                m_isInsideFunctionDefinition = true;
            }

            AST_FunctionDefinitionNode funcDeclarationTree =
                new AST_FunctionDefinitionNode(new Token(Token.TokenType.FUNC_DECLARATION, "<FUNC_DECL>", lookAhead(1).LineNr, lookAhead(1).LinePosition));

            funcDeclarationTree.addChild(match(Token.TokenType.BUILT_IN_TYPE_NAME)); // child 0 (function return type)
            funcDeclarationTree.addChild(match(Token.TokenType.NAME)); // child 1 (function name)

            match(Token.TokenType.PARANTHESIS_LEFT);
            funcDeclarationTree.addChild(parameterList()); // child 2 (parameter list)
            match(Token.TokenType.PARANTHESIS_RIGHT);
            allowLineBreak();
            funcDeclarationTree.addChild(statementList(false)); // child 3
            match(Token.TokenType.BLOCK_END);

            m_isInsideFunctionDefinition = false;

            return funcDeclarationTree;
        }