Слушатели и посетители Scope Antlr4 — вопрос дизайна

Я создал интерпретатор, похожий на Visual Basic, и теперь добавляю некоторую переменную. Моим источником информации является CH8 The Definitive Antlr Reference и сопровождающий его код. По сути, в примерах используются слушатели, а в моем коде — посетители.

Я был бы признателен, если бы кто-то мог прояснить или исправить мое понимание вещей:

Что касается областей, я должен использовать модель Listener (согласно примерам книги Cymbol), чтобы сначала пройтись по дереву, чтобы создать информацию о области/переменной, переопределив соответствующие функции входа/выхода, относящиеся к функциям и блокам, где мне нужно захватить изменение масштаба. Во-вторых, создав области, я должен затем посетить дерево, чтобы запустить программу? например где у меня есть VisitEnterFunction и VisitExitFunction, я должен затем нажать и вытолкнуть области.

Заранее спасибо за помощь в установлении правильного способа сделать это. Кевин


person KevinY    schedule 30.12.2013    source источник


Ответы (1)


Существует несколько способов реализации вложенных областей. Для разрешения символов, которые определены позже в исходном коде, обязателен двухпроходный подход. Первый проход может построить дерево символов, которое позже будет использоваться пользователем во время выполнения в текущем стеке области видимости. Вторым вариантом будет присоединение области действия в качестве аннотации к самому дереву синтаксиса. Опять же, я не могу рекомендовать книгу Шаблоны реализации языка достаточно высоко для вопросов, с которыми вы сталкиваетесь - именно это там описано.

person FreeJack    schedule 30.12.2013
comment
Если это есть в книге, где конкретно обсуждаются посетители и области действия, то мне нужно посмотреть еще раз, но этого нет в главе, посвященной этому вопросу. Насколько я знаю, книги не отвечают на мой вопрос о посетителях в контексте обзора. Я реализовал решение сейчас, но нужно протестировать дальше. Когда я решу его, я отвечу на свой вопрос, если это поможет другим или даст возможность предложить предпочтительное решение. Спасибо хоть. - person KevinY; 30.12.2013