Добавление экшенов в грамматику PEG

Оригинал: ‘Adding Actions to a PEG Grammar’ by Guido van Rossum Грамматика становится ещё лучше, если вы можете добавить (некоторую) семантику в соответствии с правилами. В частности, для анализатора Python, который я разрабатываю, мне нужно возвращать узел AST из каждой альтернативы, поскольку я хочу придерживаться текущей реализации AST в CPython. Содержание серии статей о PEG-парсере в Python PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint Многие грамматики используют соглашение, позволяющее добавлять экшены к правилам - обычно это блок кода внутри {фигурных скобок}.

Леворекурсивные PEG грамматики

Оригинал: ‘Left-recursive PEG Grammars’ by Guido van Rossum Я упоминал о левой рекурсии как о камне преткновения несколько раз, и пришло время разобраться с этим. Основная проблема заключается в том, что парсер с лево-рекурсивным спуском мгновенно падает из-за переполнения стека. Содержание серии статей о PEG-парсере в Python PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint Рассмотрим это гипотетическое правило грамматики:

Визуализация работы PEG парсера

Оригинал: ‘Visualizing PEG Parsing’ by Guido van Rossum В прошлый раз получился простой генератор парсера PEG. Сейчас же я покажу, что на самом деле делает сгенерированный парсер при разборе программы. Я погрузился в ретро-мир ASCII-арта, в частности, библиотеку с именем «curses», которая доступна в стандартной поставке Python для Linux и Mac, а также как дополнение для Windows. Содержание серии статей о PEG-парсере в Python PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint <В конце статьи под спойлером приводится gif.

Генерация PEG-парсера

Оригинал: ‘Generating a PEG Parser’ by Guido van Rossum Теперь, когда я набросал основу самописного парсера, давайте перейдём к генерации его методов из грамматики, как я и обещал. Также покажу как реализовать packrat-парсер с помощью декоратора @memoize. Содержание серии статей о PEG-парсере в Python PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint В прошлый раз мы разобрали несколько методов парсера.

Реализация PEG парсера

Оригинал: ‘Building a PEG Parser’ by Guido van Rossum Вдохновленный лишь частичным пониманием PEG, я решил попробовать его реализовать. Результат может получиться и не самым лучшим среди парсеров PEG общего назначения - их уже много (например, TatSu написан на Python и генерирует код Python) - но это хороший способ разобраться в PEG. В дальнейшем я хочу заменить им текущую реализацию парсера в CPython. Содержание серии статей о PEG-парсере в Python PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint В этом разделе я закладываю основы для понимания работы парсера, на примере простой самописной реализации игрушечной грамматики из прошлой статьи.

PEG парсеры

Оригинал: ‘PEG parsers’ by Guido van Rossum Несколько лет назад меня кто-то спросил имеет ли смысл превести Python на PEG-парсер (или на грамматику PEG; я не помню точно кто и когда это было). Тогда я немного посмотрел на него, но так и не пришёл к какому-либо выводу, а потому и отбросил эту тему. Недавно я узнал больше о PEG (Parsing Expression Grammars, грамматике по парсингу выражений), и теперь я думаю, что это интересная альтернатива самописному генератору парсеров, который был разработан 30 лет назад, когда только начинал работать над Python.

Содержание цикла статей о PEG-парсере для Python

Оригинал: ‘PEG Parsing Series Overview’ by Guido van Rossum Содержание серии статей о PEG-парсере в Python 🔗 PEG парсеры Реализация PEG парсера Генерация PEG парсера Визуализация работы PEG парсера Леворекурсивные PEG грамматики Добавление экшенов в грамматику PEG Мета-грамматика для PEG парсера Реализация остальных возможностей PEG PEG на Core Developer Sprint А вот видео с North Bay Python, в котором он рассказывает про PEG парсеры.

Рецензия на книгу "Пиши, сокращай", или как же уважать читателя?

Тема выражения своих мыслей, их структурирования и умение донести идею сейчас очень актуальна для меня. Порой мне кажется, что это даже важнее, чем способность писать код. Так что когда несколько человек примерно в одно и то же время посоветовали мне “Пиши, сокращай”, я сразу пошёл в Читай-город (не реклама, в других магазинах можно найти дешевле). Немного об издании 🔗Книга выполнена отлично! Приятная на ощупь плотная бумага, чёткая печать, яркие иллюстрации (за комикс с девушкой отдельное спасибо!

Мультитенантность на примере DjangoORM и PostgreSQL

слайды Что такое SaaS и тенант? 🔗Sofware as a Service (SaaS) - модель реализации вашего приложения, когда вы предоставляете свой продукт разным клиентам практически не меняя его. Например, есть у вас CRM, и вы подключаете в неё нескольких клиентов, разнося их по поддоменам: mvideo.crm.ru, dns.crm.ru, eldorado.crm.ru… Код процентов на 90% совпадает, различаются лишь стили и третьестепенная бизнес-логика. Каждый клиент в этом случае завётся тенантом. А чтобы чуть упростить вашу жизнь как разработчика, познакомлю с такой классной вещью как мультитенантность на примере DjangoORM и PostgreSQL.

Первый python митап в Краснодаре

Список докладов: Влад Токарев: “Itertools и функциональный python”. Видео Презентация Дмитрий Жерлицын: “Опциональная статическая типизация в Python 3”. Видео Презентация Виктор Тыщенко: “Реализация мультитенантности на примере Django и Postgres”. Видео Презентация Фото в группе в Vk и facebook