コード例 #1
0
ファイル: Parser.cs プロジェクト: substans/Sprak
        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);
        }
コード例 #2
0
        private AST_FunctionDefinitionNode createFunctionDefinitionNode(string returnTypeName, string functionName, AST parameterList)
        {
            AST_FunctionDefinitionNode functionNode =
                new AST_FunctionDefinitionNode(new Token(Token.TokenType.FUNC_DECLARATION, "<EXTERNAL_FUNC_DECLARATION>"));

            functionNode.addChild(new Token(Token.TokenType.BUILT_IN_TYPE_NAME, returnTypeName));
            functionNode.addChild(new Token(Token.TokenType.NAME, functionName));
            functionNode.addChild(parameterList);
            functionNode.addChild(new Token(Token.TokenType.STATEMENT_LIST, "<EMPTY_STATEMENT_LIST>"));

            return functionNode;
        }
コード例 #3
0
        private AST_FunctionDefinitionNode createFunctionDefinitionNode(string returnTypeName, string functionName, AST parameterList)
        {
            AST_FunctionDefinitionNode functionNode =
                new AST_FunctionDefinitionNode(new Token(Token.TokenType.FUNC_DECLARATION, "<EXTERNAL_FUNC_DECLARATION>"));

            functionNode.addChild(new Token(Token.TokenType.BUILT_IN_TYPE_NAME, returnTypeName));
            functionNode.addChild(new Token(Token.TokenType.NAME, functionName));
            functionNode.addChild(parameterList);
            functionNode.addChild(new Token(Token.TokenType.STATEMENT_LIST, "<EMPTY_STATEMENT_LIST>"));

            return(functionNode);
        }
コード例 #4
0
ファイル: Parser.cs プロジェクト: bloomingbridges/hxSprak
        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;
        }