Основываясь на комментарии OP,
Я работаю над переписыванием и эквивалентностью запросов XPath
ему нужен анализатор, который создает деревья абстрактного синтаксиса, испособы проанализировать эти деревья и преобразовать их.Анализаторы и «переписывание» могут быть затем выполнены процедурно путем ходьбы / изменения AST;это традиционный способ сделать это.
Но, похоже, основное внимание должно уделяться целям ОП.Для этого ему нужен анализ и переписывание.Но это не должно быть полностью сделано традиционным, процедурным способом.Скорее, было бы неплохо, если бы анализ / переписывание можно было выполнить непосредственно с использованием нотации XPath.
Я предлагаю ему взглянуть на наш DMS Software Reengineering Toolkit , который анализирует, создает AST, но в частностипозволяет «переписывать» на AST, используя синтаксис поверхности.Тогда XPath «переписывает» может быть написано непосредственно как эквивалент по выражениям XPath.Мотивирующим примером того, как это работает, можно считать переписывание уравнений алгебры с использованием DMS .Из этого примера должно быть очевидно, что грамматика для XPath легко определяется.