parser
Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.
parser bird
Скачать Parser:    Windows    Linux    Mac OS X   FreeBSD 8 9 10
Что такое Parser?
Parser — это технология для самостоятельного создания сайтов с помощью простого языка. Parser начал создаваться в Студии Лебедева в 1997 году. Сегодня подавляющее большинство сайтов, создаваемых Студией Лебедева, делаются с его помощью.
А зачем он вообще?
Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты. Безопасная работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность.
Если есть PHP, то для чего Parser?
PHP — это язык программирования, требующий соответствующей подготовки. Parser же простыми средствами решает сложные задачи, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.
22 февраля 2017

Выпущена версия 3.4.5 RC

Проведены оптимизации, ускорившие обращение к переменным, вывод результатов и обработку выражений. В тестах общее ускорение составляет до 15%.

Реализован вариант вызова ^reflection:create[ $.class[имя класса] $.constructor[имя конструктора] $.arguments[хеш аргументов] ], в котором поддерживается переменное количество аргументов.

Добавлен метод ^reflection:mixin[$source;options] для копирования полей и методов из одного класса в другой. По умолчанию копируется в класс, из которого вызван метод, можно поменять через $.to[куда]. Можно не копировать методы $.methods(false) или поля $.fields(false). Если при копировании нужно перезаписывать имеющиеся методы или поля, нужно указать $.overwrite(true).

C помощью нового метода ^reflection:stack[] появилась возможность во время выполнения кода посмотреть стек вызовов. В отличии от стека, который выводится при исключении, ^reflection:stack[] возвращает только методы на парсере, но зато есть возможность получить параметры $.args(true) и локальные переменные $.locals(true).

Скорректирована объектная модель. Теперь корректнее говорить не «объект является экземпляром класса», а «объект имеет прототипом класс». Различие только при работе со статическими свойствами класса из объекта. По аналогии с Java Script — при чтении $self.class_field происходит обращение к полю class_field в классе, а при записи $self.class_field[value] запись происходит в объект и последующие обращения к $self.class_field читают уже значение из объекта.

Появилась возможность эффективно работать с объектом, как с хешом. $h[^reflection:fields_reference[$o]]. Написать $h[^hash::create[$o]] можно было и раньше, но fields_reference создает не новый хеш с такими же ключами, как были поля в объекте, а специальный хеш-ссылку, напрямую связанный с объектом. Например при ^h.delete[name] в самом объекте удалится поле name.

Реализован оператор ^return[] (^return[результат]), осуществляющий выход из метода при его вызове.

У операторов ^break[] и ^continue[] добавился опциональный параметр с условием их выполнения. Теперь вместо ^if($condition){ ^break[] } можно писать ^break($condition).

Через синтаксис $method.name можно узнать имя метода.

Под Windows теперь используется Unicode API для работы с файлами, поэтому с русскими именами файлов можно работать не только в кодировке Windows-1251, но и в UTF-8.

Добавлено ограничение на максимальный объем файлов, который может загрузить парсер (по умолчанию 512Мб). Под Windows обеспечена корректная работа ^file::stat с файлами размером более 4-х гигабайт.

Добавлен параметр $.from-charset[кодировка] в ^file::create[]. Теперь парсер можно использовать для перекодировки данных в любую сторону, а не только в указанную кодировку, как раньше.

С помощью ^hash.contains[_default] можно проверить, задано ли в хеше значение по умолчанию.

С ключом _default был связан тонкий момент — такое значение мог задать не только разработчик. Если ключи хеша принимаются из внешнего источника, то и пользователь мог передать _default, что могло бы привести к некорректной работе кода. Теперь же _default воспринимается только если его написать в коде на парсере.

Хеш, в котором задан только _default, теперь считается определенным (def $h).

Убрана блокировка хеша на запись при переборе его элементов.

Возможно создание хеша на основе свойств файла ^hash::create[$file].

Добавился вариант вызова ^reflection:method[$method;$object], при вызове результата $method будет работать в контексте $object ($self будет равен $object). Таким образом можно добавить или переопределить метод в конкретном объекте.

Добавился метод ^reflection:filename[$class or object or method] для получения имени файла, в котором определен класс или метод.

Для получении информации о методе добавлена поддержка варианта вызова ^reflection:method_info[$junction].

С помощью нового метода ^reflection:tainting[$string] можно посмотреть, из кусочков с какими языками состоит строка.

Результат ^reflection:methods[имя класса] теперь отсортирован в порядке, обратном порядку добавления методов. С помощью дополнительной опции $.reverse(false) можно задать прямой порядок.

При подключении модулей через @USE теперь вызывается оператор ^use[]. Его можно переопределить и реализовать свою логику загрузки модулей. Реализация на парсере используемой в самом парсере логики ^use[] выглядит так.

Добавлена опция $.encloser[] к ^table::create[] (аналогична существующей в ^table::load[]).

Обращение $строка.что-угодно допустимо (не вызывает исключение) не только у пустых, но и у пробельных строк.

При определении локальной переменной result включается оптимизация, удаляющая при компиляции все пробельные символы. Теперь в этом режиме можно использовать и непробельные символы — раньше это приводило к исключению, теперь же эти символы выводятся в результат.

При выводе даты в формате ISO 8601 (^date.iso-string[]) добавлены опции $.colon(true/false) для исключения двоеточия во временной зоне, $.ms(true) для добавления миллисекунд (всегда .000) и $.z(false) чтобы временная зона UTC записывалась как +00:00. При разборе даты теперь понимается формат временной зоны +hhmm.

При создании даты через конструктор с перечислением полей появился дополнительный параметром в котором можно указать временную зону.

Некоторые поля даты (year, month, day, hour, minute, second) можно менять, $date.year(2017).

В конфигурационном методе @conf[] можно задавать лимит итераций в циклах и максимальную глубину рекурсии. $LIMITS[ $.max_loop(20000) $.max_recoursion(1000) ] - значения по умолчанию.

При задании $response:status меньше 100 он будет возвращен в виде кода выхода процесса парсера.

Новая реализация $caller исправила некоторые ошибки и позволяет через $caller.method получить вызывающий метод.

При отправке писем (^mail:send[]) разделитель multipart частей сделан случайным, убран устаревший заголовок errors-to.

В методе ^table.hash[] можно динамически задавать не только ключ, но и значение ^table.hash{...;...}

^curl:load[] по аналогии с ^file::load[] возвращает хеш tables с таблицами всех заголовков.

Исправлен ряд ошибок:

Теперь в ^file::exec[] можно корректно передать бинарный файл в качестве $.stdin.

При вызове ^curl:load[] значение content-type по умолчанию теперь берется из заголовков ответа.

Увеличен стек в Windows версии, в некоторых случаях бесконечной рекурсии его не хватало.

Новая реализация обращения к базовым классам (^BASE:method[]) быстрее и лишена ошибок старой реализации.

Исправлены ошибки, приводившие к неполному выполнению кода finally и наоборот выполнению лишнего кода после вызова ^break[].

Исправлена ошибка, в результате которой обращение к $date.week меняло дату.

Исправлена некорректная обработка null значений в драйвере SQLite.

28 апреля 2016

Открылась обновленная версия сайта

Ко дню четырнадцатилетия «Парсера» открылась обновленная версия сайта. Заработал раздел «Библиотека», в котором по тегам сгруппированы готовые решения различных задач. У зарегистрированных пользователей появилась возможность самостоятельно добавлять свои сайты в раздел «В действии».

Строительная компания "Новый Город" — Каталог детских и спортивных площадок от строительной компании «Новый Город». / Студия WebSun

Сайт завода «Калугатрансмаш» / Студия Артемия Лебедева

Дипломные и курсовые работы на заказ — Пользователи сайта могут заказать курсовые и дипломные работы, контрольные и чертежи. / Альма

Деревянные балясины ВятГор — Компания "Вятгор" является производителем продукции из сосны: элементов лестниц (балясины, столбы, ступени, перила) и точеных изделий (ножки для мебели, дверные ручки). / Габдуллин Рамиль

Поиск лекарств в Казахстане / Гуменюк Максим

Республиканский издательский дом. / Манитура

Провинция 35 — Российская экспортно-импортная торговая компания, которая предоставляет широкий спектр торгово-экономических и транспортных услуг по работе с Китаем и Японией. / Эдуард Кожевников

Строительная техника и запчасти / Владимир Черняков

Проект "ТестАнкета" — Тестирование и анкетирование для учебных заведений, предприятий, государственных и социологических организаций. / Михаил Колодин

Brandwill — Креативное агентство / Владимир Обухов