Для синтаксического анализатора требуется поток входных токенов предварительно определенным образом от лексера. Для синтаксического анализатора дерева требуется определить «поток» AST, чтобы он мог его понять. Следовательно, ваш синтаксический анализатор и лексер должны согласовать интерфейс, и ваш синтаксический анализатор дерева и синтаксический анализатор также должны согласовать.
Синтаксический анализ дерева позволяет вам выполнять преобразования на деревьях AST - что, как я уверен, вы знаете, весьма полезно. Единственный синтаксический анализатор дерева c / c ++, о котором я слышал, это iBurg . Я не использовал его, и я думаю, что анализатор дерева в основном используется в академических кругах. Для большинства приложений, которые я видел, у них есть AST, они выполняют всю свою работу непосредственно на дереве. Это означает, что они также должны сделать свои собственные правила соответствия.