English
Студия Артемия Лебедева представляет…
parser


Последние новостиПтичкаИз раздела FAQ
[24 февраля 2011]  Выпущена версия 3.4.1:

Появилась встроенная поддержка json.

На UNIX появилась возможность собрать Parser с поддержкой библиотеки curl (через которую можно работать с https серверами и устанавливать keep-alive соединения).

Подключаемые через @USE/^use[] классы сначала ищутся относительно текущего файла, в котором эти @USE/^use[] написаны.

Теперь определяемые пользователем методы могут принимать произвольное число параметров: @method[arg;*args] (в переменной $args будет хэш со всеми параметрами с числовыми ключами начинающимися с 0).

Пользовательским методам теперь можно определять допустимые типы их вызова. В директиве @OPTIONS можно указать параметр dynamic или static (если не указано — any), который будет действовать на все методы, описываемые в файле. А определённым методам можно задать только статический тип вызова: @static:method[params].

У пользовательских классов можно определить default setter (@SET_DEFAULT[name;value]) — метод, который будет вызываться при записи в несуществующие поля объектов данного класса.

Оператор if теперь может иметь произвольное число «elseif» секций, например: ^if(a>0){1}(a==0){0}{-1}.

У классов теперь отключено наследование метода @auto[]. Если класс A имеет производные классы B и C, то описанный в нём метод auto в любом случае будет выполнен лишь единожды (раньше он выполнялся при подключении каждого из классов).

Класс void теперь полностью совместим с классом string, т.е. теперь можно вызывать функции строки у неопределённой переменной не проверяя её предварительно на определённость (def).

У класса hash появился метод ^хэш._at($index) (или ^хэш._at[first|last]), который можно использовать для доступа к элементу хэша с нужным индексом (элементы в хэше упорядочены начиная с версии 3.4.0).

Добавлен оператор ^apply-taint[[lang]][...], который приводит к сиюминутному преобразованию всех языковых кусочков в строке. Указанный язык (по умолчанию — as-is) применяется к грязным кусочком с неопределённым языком.

Появился метод для конвертирования чисел из одной системы исчисления в другую: ^math:convert[number](base-from;base-to).

Метод ^таблица.select(...)[опции] теперь понимает опции $.limit(X) и $.reverse(true|false).

У метода поиска и замены в строке ^строка.match[...] появился необязательный четвёртый параметр, значение которого возвращается, если не было найдено совпадений с шаблоном.

Парсер теперь ругается на неизвестные ключи у метода ^строка.match[...].

Метод ^string:js-unescape[...] теперь также декодирует символы, закодированные в виде \uXXXX (раньше декодировал только %uXXXX).

У конструктора ^file::base64[закодированное] теперь есть ещё один способ вызова (по параметрам больше похожий на ^file::create[...]): ^file::base64[text|binary;имя файла;закодированное[;$.content-type[...]]].

Конструктор ^file::create[...] в опциях теперь понимает параметр $.content-type[...].

Добавлен метод ^reflection:copy[$src;$dest], который осуществляет копирование всех полей из $src в $dest.

Если при загрузке таблицы из файла в опциях $.encloser или $.separator задано значение '#', то отключается удаление в загружаемом файле строк, начинающихся с этого символа (обычно они автоматически удаляются как комментарии).

Теперь пробельные символы, написанные в коде между методами, не попадают в результат.

В @МЕТАКОМАНДАХ (@USE, @CLASS, @BASE, @OPTIONS) теперь игнорируются пробельные символы в конце строк.

Небезопасная версия (grpunlim) теперь позволяет передавать скриптам, запускаемым через ^file::exec/cgi[...], переменные окружения с любыми именами.

У метода ^изображение.replace(color;color)[poligon] третий параметр теперь не является обязательным. Если он не задан, то цвет заменяется у всего изображения.

Если при загрузке текстовых файлов или таблиц без опции $.charset у загружаемого файла обнаруживается BOM-код, то автоматически происходит его перекодирование из UTF-8 в текущую кодировку ($request:charset).

Теперь метод ^reflection:method_info[класс;метод] в поле $.inherited возвращает имя того класса-предка, в котором находится реально вызываемый унаследованный метод.

Теперь метод ^reflection:method_info[класс;метод] в поле $.overridden возвращает имя класса-предка, в котором находится последний перекрытый метод.

Тело HTTP-запроса в виде файла теперь можно получить из $request:post-body.

Версия скомпонована с последними версиями библиотек PCRE (8.12) и libxml2 (2.7.8).


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

Теперь при вызове ^file::exec/cgi[...;parser3.cgi] без параметров не происходит зацикливания.

Исправлена ошибка, приводящая на некоторых системах к искажению данных.

Исправлена ошибка, из-за которой не работало обращение к $method-junction.CLASS_NAME.

Исправлена ошибка, из-за которой выдавалось невразумительное сообщение об ошибке при записи cookie со слишком большим значением expires.

При выдаче исключений иногда сообщалось «element can not be stored to stateless_class», хотя вместо «stateless_class» должен был указываться конкретный класс.

Исправлена ошибка, приводящая к core при отправке бинарных файлов удалённому серверу в конструкторе ^file::load[...;http://сервер/;$.file[$file]].

Исправлена ошибка, приводящая к core в случае сборки парсера некоторыми компиляторами.

Исправлена ошибка, приводящая к core, если в строках оказывались символы \0 (добиться такого было сложно, но всё-таки можно).

Исправлена ошибка, из-за которой метод ^таблица.locate[field;value] не понимал третий параметр с опциями.

Исправлена ошибка, из-за которой порядок элементов в $form:fields не был определён.

Исправлена ошибка, из-за которой в заголовках отправляемых писем иногда делался избыточный эскейпинг строчных латинских символов (проблем с чтением таких писем не возникало, но их размер получался больше, чем необходимо).

Исправлена ошибка, из-за которой оператор ^sleep(...) понимал только целочисленные значения.

В библиотеке PCRE исправлена ошибка, из-за которой неверно производился поиск заглавной буквы 'Ф' без учёта регистра.



Что такое Parser?
Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать. Parser начал создаваться в Студии Лебедева в 1997 году. Сегодня подавляющее большинство сайтов, создаваемых Студией Лебедева, делаются с его помощью.

А зачем он вообще?
Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты. Работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность.

Если есть PHP, то для чего Parser?
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.

Я программировал на других языках, можно ли, в двух словах, что же такого удобного в Parser?
Parser в известном смысле — макроязык, в нём нет оператора print; весь текст, набранный в исходном файле, суть большой оператор print. Конструкции Parser являются погруженными в текст.
Получается, что вы не пишете программу, которая выводит текст — наоборот, в имеющийся текст вы добавляете логику, ^if(условие){действие}, и организацию, блоки(методы), на которые вы разбиваете HTML-код:

@header[]
...
@footer[]
...
@navigation[]
...
@body[]
...

Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)?
Парсер все-таки не назначен обработчиком ваших документов.
Для проверки функционирования парсера наберите в адресной строке броузера:
http://ваш_сайт/cgi-bin/parser3.cgi (или .exe, для версии под Win32)
Вы должны увидеть примерно следующее:

Parser/3.x.x
Если вы это увидели, парсер скопирован куда следует, права на него установлены правильные.

Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride.
Чтобы проверить, обрабатывается ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Если при релоаде страницы вы не увидите 500 ошибку (она обязательно появится если все настроено верно) — значит данный файл у вас не обрабатывается. Измените значение AllowOverride или обратитесь к вашему администратору.



Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.

  • Теперь на 30% удобнее!
  • Новое ядро (переработанное и, разумеется, улучшенное)
  • Новый улучшенный синтаксис
  • Поддержка XML, XSL, XPath и DOM
  • Доступен в документированных исходных текстах
  • Расширенная поддержка баз данных
  • Поддержка объектно-ориентирующихся программистов
  • Подробная документация по языку на русском языке (160 страниц!)
  • Поддержка UTF-8