Нет, ну, вообще-то, можно смотреть на сами эти функции "бегания между тегами" как на лексический анализатор.

Синтаксический уровень - это уже извлечение информации из страницы, и сценарии его пишутся в виде:
IMPORT Tp := TagsParser;
Tp.SkipPair(rd, 'div'); Tp.SkipPair(rd, 'div'); Tp.FindTag(rd, 'div'); Tp.FindTag(rd, 'div');
Tp.SkipTag(rd);
beg := rd.Pos();
Tp.FindCloseTag(rd, 'div');
end := rd.Pos();
- и [beg, end) - интервал искомого блока.
Приведённый сценарий - это эквивалент XPath:
/html/body/div[3]/div[1]
Сначала предполагалось ввести подмножество XPath, потом поняли, что нафиг надо, если можно обойтись такой библиотечкой и сценариями с этими командами.
Может, обёрточка ещё какая-то появится. Но библиотечные решения мне стали нравится однозначно больше, чем клепание каких-то DSL. Многословность - не проблема в большинстве случаев... Зато меняй библиотеку как хочешь. Это не DSL скорректировать.