Присутствовать или слушать? Дело вкуса – не более того.
Или нет? Фон .
После анализа исходного текста на выходе сформировалось дерево:
Само дерево не имеет никакого смысла, оно «Деревянное», результат анализа (обхода) этого дерева имеет смысл и некоторую ценность.
Для тех, кто не готов напрягаться и писать самописные сани для спуска с дерева (например, я), в antlr4 добавлена возможность получить анализатор практически бесплатно.
1. Посетитель
Классический — это поведенческий шаблон проектирования.При обходе узлов определяется метод, обрабатывающий текущий тип узла, после чего метод вызывается и с этого начинается разработка, а именно анализ входящего поддерева.
2. Слушатель
Нововведение, появившееся в четвертой версии.Поведение этого класса далеко от классического (Observer или Publish/Subscribe).
В классической версии есть менеджер, оповещающий абонентов о возникновении событий.
Поведение рассматриваемого слушателя больше похоже на работу инспектора.
Перед проверкой узла инспектор делает пометку «Проверяю узел Х», затем обходят потомков узла, после обхода можно сделать «Вывод о результатах обхода узла Х».
Упражняться
Для лучшего понимания происходящего обратимся к автору распознавателя pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference .В книге «Полный справочник по ANTLR 4» В главе 8.2 Преобразование JSON в XML автор вещает с помощью Listener. Примеры в книге основаны на JAVA, с JAVA я не знаком, но они безболезненно переводятся на C# (вот что значит лучшая практика клонирования).
Для подготовки слушателя нам понадобится VS, C# proj и JASON.g4 примерно с одинаковым содержимым.
Теги: #antlr4 #посетитель #слушатель #дизайн и рефакторинг #C++grammar JASON; json: object
-
Смог
19 Oct, 24