• Разбор кода и построение синтаксических деревьев с PLY. Основы

    • Tutorial

    Что такое PLY?


    PLY — это аббревиатура из первых букв выражения: Python Lex-Yacc.
    Фактически, это порт утилит lex и yacc на python в красивой обертке.
    Работать с ply очень просто и порог входа для начала использования практически нулевой.
    Написан он на чистом питоне и представляет из себя LALR(1) парсер, но кому это интересно?
    Я по натуре практик (как и большинсво из вас) поэтому пошли в бой!

    Что будем делать?


    На сайте есть пример написания очередного калькулятора, поэтому повторяться не будем. А сделаем что-то навроде парсера очень очень узкого подмножества PHP :)
    Наша задача в конце статьи построить синтаксическое дерево для такого примера:

    <?php
    $val = 5;
    $result = substr( "foobar", 2*(7-$val) );
    echo "это наш результат: $result";
    


    Пример очень маленький и взят с потолка. Но чтобы построить дерево кода нужно много и походу мы задействуем такой механизм PLY как state.

    Читать дальше →
  • Создание базы данных на основе API 37signals

      Один из наших сервисов занимается построением ежедневных отчетов анализируя данные из Highrise.
      Данные из Highrise можно получать несколькими способами:
      • Использовать экспорт в CSV
      • Использовать API

      CSV нами даже не рассматривался и мы попытались найти удобный метод для ежедневного обновления нашей базы через API.
      Придумали следующее:
      • Получаем XML фид и парсим его.
      • Все непосредственные дочерние поля мы считаем полями в таблице.
      • Все вложенные элементы мы считаем связанными таблицами

      Читать дальше →
    • Песочница для PHP

      В одном из наших проектов существует возможность написания плагинов для расширения функционала сервиса.
      Пользователи создают плагины-приложения в нашем интерфейсе и описывают их логику на PHP.
      Необходимо было ограничить возможности PHP, чтобы никто нам случайно не нашкодил.
      Существует некоторое количество инструментов для исполнения кода PHP в защищенной среде: выполнение в отдельном процессе, сохранение кода в файле и вызов через cli с урезанными возможностями или использование специализированных расширений для PHP.
      В силу специфики сервиса и приложений а так же для возможности использования песочницы на всех ОС (процессы и расширения для sandbox не работают в Windows) с базовыми настройками PHP был написан небольшой класс: Ext_Sandbox_PHPValidator.
      Читать дальше →