Edit in JSFiddle

(function (app) {
    'use strict';
    
    app.directive('prZeroDad', function () {
        return {
            template: function () {logIt('DAD template 0');},
            controller: function () {logIt('DAD controller 0');},
            compile: function () {
                logIt('DAD compile 0');
                return {
                    pre: function () {logIt('DAD pre link 0');},
                    post: function () {logIt('DAD post link 0');}
                  };
            },  
            restrict: 'A'
        };
    });
    app.directive('prZeroSon', function () {
        return {
            template: function () {logIt('SON template 0');},
            controller: function () {logIt('SON controller 0');},
            compile: function () {
                logIt('SON compile 0');
                return {
                    pre: function () {logIt('SON pre link 0');},
                    post: function () {logIt('SON post link 0');}
                  };
            },  
            restrict: 'A'
        };
    });
    app.directive('prHighestDad', function ($compile) {
        return {
            controller: function () {logIt('DAD controller 200');},
            compile: function () {
                logIt('DAD compile 200');
                return {
                    pre: function () {logIt('DAD pre link 200');},
                    post: function (a,b,c,d,$trFn) {logIt('DAD post link 200');}
                  };
            },
            priority: 200,
            restrict: 'A'
        };
    });
    app.directive('prHighestSon', function ($compile) {
        return {
            controller: function () {logIt('SON controller 200');},
            compile: function () {
                logIt('SON compile 200');
                return {
                    pre: function () {logIt('SON pre link 200');},
                    post: function (a,b,c,d,$trFn) {logIt('SON post link 200');}
                  };
            },
            priority: 200,
            restrict: 'A'
        };
    });
    app.directive('prLowestDad', function () {
        return {
            controller: function () {
                logIt('DAD controller -200<br/>----------------------<br/>');
            },
            compile: function () {
                logIt('DAD compile -200<br/>----------------------<br/>');
                return {
                    pre: function () {
                        logIt('DAD pre link -200<br/>----------------------<br/>');
                    },
                    post: function () {logIt('DAD post link -200');}
                  };
            },
            priority: -200,
            restrict: 'A'
        };
    });
    app.directive('prLowestSon', function () {
        return {
            controller: function () {
                logIt('SON controller -200<br/>----------------------<br/>');
            },
            compile: function () {
                logIt('SON compile -200<br/>----------------------<br/>');
                return {
                    pre: function () {
                        logIt('SON pre link -200<br/>----------------------<br/>');
                    },
                    post: function () {logIt('SON post link -200');}
                  };
            },
            priority: -200,
            restrict: 'A'
        };
    });
    
}(angular.module('app', [])));



function logIt(msg){
var log=angular.element('<li/>').html(msg);
window.document.querySelector('.logs ol').appendChild(log[0]);
}
section {
    background-color: #eee;
    border: 1px solid #aaa;
    border-radius: 5px;
    margin-bottom: 10px;
    padding: 10px;
}
<section>
    <h2>Directive:</h2>
    <div pr:highest:dad="" pr:zero:dad="" pr:lowest:dad="">Dad
      <div pr:highest:son="" pr:zero:son="" pr:lowest:son="">Son
      </div>
    </div>
</section>

<section class="logs">
    <h2>Log:</h2>
    <ol></ol>
</section>