Битва «Слушатель Против Посетителя» На Стадионе Antlr4

Присутствовать или слушать? Дело вкуса – не более того.

Или нет? Фон .

После анализа исходного текста на выходе сформировалось дерево:

Битва «Слушатель против Посетителя» на стадионе antlr4

Само дерево не имеет никакого смысла, оно «Деревянное», результат анализа (обхода) этого дерева имеет смысл и некоторую ценность.

Для тех, кто не готов напрягаться и писать самописные сани для спуска с дерева (например, я), в 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 примерно с одинаковым содержимым.

   

grammar JASON; json: object

Теги: #antlr4 #посетитель #слушатель #дизайн и рефакторинг #C++
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.