Как стать автором
Обновить

Вредные советы при работе с ANTLR

Время на прочтение 2 мин
Количество просмотров 3.8K
Вашему вниманию предлагается набор вредных советов, которые помогут вам создать наиболее производительный парсер. Не забывайте делать все по инструкции, иначе что-нибудь пойдет не так!

1. ATN — не баг, а фича


Терренс Пар сделал отличную фичу для оптимизации прогноза ветвления в вашей грамматике. Исключительно из заботы о производительности вашего парсера, поле является статичным и будет накапливать информацию бесконечно! Разумеется на маленьких файлах вы не заметите особой разницы, главное не разбирайте файлы в 2-3 мегабайта в ваших тестах, пусть не хватает памяти кому-то другому!

2. Lookahead для тех, кто не привык оборачиваться на взрывы!


Если ваша грамматика проверяет все токены из потока на каждом правиле, то вы можете гарантировать точность обработки! Если не хватит стека, то достаточно увеличить его размер в десяток раз, главное сделать побольше правил!

3. SLL для слабаков


Зачем заниматься оптимизацией, если за вас это может сделать ANTLR4? Грамматики в режиме ALL позволяют сэкономить ваше бесценное время, что бы читать подобные статьи. Не забывайте добавлять одни и те же токены в каждую альтернативу, особенно, если это выглядит красиво.

4. AST — вся информация у вас


Не забудьте послушать Терренса и добавить в ваш парсер поддержку visitor, listener. Внедрение кода в грамматику не только лишние трудности, но и потенциальная проблема при рефакторинге! Обходя каждый узел в дереве вы не только сможете испытать удачу, но и проверить нервы заказчика!

5. Больше правил, богу правил!


А знаете ли вы, что при помощи ANTLR4 можно построить вавилонскую башню? В коде не могут встречаться участки с большой вложенностью? Функция внутри функции с огромным количеством выражений? Просто не показывайте заказчику работу на минифицированных js файлах, все равно их никто не понимает, даже браузеры.

6. Лексер нужен только для создания токенов


Ни при каких обстоятельствах не пытайтесь что-то делать с токенами в лексере, упаковывание блока { } в токен не позволит вам получать удовольствие от просмотра за машинами заказчика, требующими больше памяти!

Memory must flow! May memleak be with you!
Теги:
Хабы:
+11
Комментарии 29
Комментарии Комментарии 29

Публикации

Истории

Работа

Java разработчик
359 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн