Парсер HTML на PHP без регулярных выражений с ноля?
Для начала нужно реализовать лексер - модуль, принимающий на вход текст на HTML и выдающий список лексем с их параметрами, например <div id="test">
Привет
<div>
может быть превращено вOPEN_TAG_START, DIV, ID, EQUALS, STRING(test), TAG_END, TEXT(Привет), 
CLOSE_TAG_START, DIV, TAG_END
Затем второй модуль, парсер, по полученным лексемам строит синтаксическое дерево. Это гораздо более сложная часть, особенно если учесть, что для HTML необходимо как-то обрабатывать некорректные варианты, наподобие <b><i>Тест</b></i>.
В результате должно получиться DOM-дерево, скомпилированное из исходного HTML.
Начать вникать в компиляторы можно по Книге красного дракона
как, к примеру, браузере анализируют код html, какие алгоритмы испольщуют и т.д. не на регэкспах ведь они это делают.Конечно же нет. И конечно же не на php это делают. Но это лирика, все что Вам надо - уметь читать и эта ссылка:
https://habrahabr.ru/post/174057/
ПС: Боюсь что разобравшись глубоко в теме, вы напишите все тот же SimpleHtmlDom. Громоздкий и тормозной.  Если посмотреть на современные браузеры - увидите, что они кушают намного больше оперативки, чем замечательная SimpleHtmlDom.