private FunctionDeclNode FunctionDecl() throws SyntaxException {
        try {
            nextToken();
            Position pos = iterator.current().coordinates().starting();
            String name = Identifier();
            FunctionTypeNode signature = Signature();
            BlockNode<Statement> code = Code();

            return new FunctionDeclNode(name, signature, code, pos);
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }        
    }