OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: YSon - Парсер/генератор JSON
СообщениеДобавлено: Среда, 09 Январь, 2013 17:52 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Начал пилить. У всех уже есть, чем оберон хуже :)

Пока есть структуры аля DOM, а так же альфа-версии генератора и парсера. Парсер сделал двухуровневый, с возможностью не строить структуры, в общем, по принципу SAX для xml, видимо, в будущем, таким же будет и генератор.

В итоге планирую запилить сериализатор/десериализатор всяких рекордов.

(модератор, 06.06.2013) выложено в коллекции: http://oberoncore.ru/bbcc/subs/yson/


Последний раз редактировалось Евгений Темиргалеев Четверг, 06 Июнь, 2013 11:10, всего редактировалось 2 раз(а).
пометка о размещении в коллекции


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Среда, 09 Январь, 2013 18:39 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
Парсер сделал двухуровневый, с возможностью не строить структуры, в общем, по принципу SAX для xml


Вот это правильно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 13:23 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
попытка понимания/применения цикла Дейкстры:
Код:
   PROCEDURE ReadChar (rd: Reader; OUT ch: Char; OUT res: INTEGER);
      VAR x: CHAR; stop: BOOLEAN; u: ARRAY 6 OF CHAR; uc: INTEGER;
   BEGIN
      res:=continue; stop:=FALSE; ch.screen:=FALSE; uc:=-1;
      WHILE ~stop & rd.Read(x)  DO
         IF (x='\') & ~ch.screen THEN
            ch.screen:=TRUE;
         ELSIF ch.screen & (uc<0) THEN
            CASE x OF
               '\', '"', '/', 08X, 09X, 0DX, 0AX, 0CX: ch.x:=x; stop:=TRUE;
               |'u': uc:=0;
            ELSE
               res:=err; stop:=TRUE;
            END
         ELSIF ch.screen & (uc>=0) THEN
            IF uc < 4 THEN
               u[uc]:=x; INC(uc);
            ELSE
               u[4]:='H'; u[5]:=0X;
               Strings.StringToInt(u$, uc, res);
               IF res=0 THEN
                  ch.x:=CHR(uc);
               ELSE
                  res:=err;
               END;
               stop:=TRUE;
               uc:=-1;
            END;
         ELSIF (x#'\') & ~ch.screen THEN
            ch.x:=x;
            stop:=TRUE;
         END;
      END;
      IF ~stop THEN res:=eot END;
   END ReadChar;

Символы могут быть обычные и экранированные.
При этом, экранированные символы имеют два подвида (экранирование служебных и юникодных символов вида uXXXX) и могут встречаться только внутри кавычек.
Но о кавычках положено знать только сканнеру, поэтому флаг экранированности передаём на выход вместе с символом ББ (отдельная структура показалась приемлимой).
Плюс к этому, внезапно может закончиться файл :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 13:32 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Главное, чтобы попроще и покомпактнее 8)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 13:34 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Борис Рюмшин писал(а):
Главное, чтобы попроще и покомпактнее 8)

Это ко всему парсеру относилось, а не к примеру))) А то мы как-то одновременно сообщения опубликовали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 20:42 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Символ экранироования - это escape character. То есть, вместо screen лучше использовать esc. Так понятнее, мне кажется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 22:26 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Valery Solovey писал(а):
escape character
Спасибо, как-то я проигнорировал этот факт.

Борис Рюмшин писал(а):
Это ко всему парсеру относилось
Сейчас вот такой расклад сырцов по строкам:
Код:
YSonParser:  390
YSonModels:  287
YSonConverters:  172
YSonGenerator:  159


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 10 Январь, 2013 23:55 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Пётр, да это не так важно. Я больше про интерфейс наверно...
Просто Xmlcore штука хорошая, но уж больно тяжеловесная. Хотя, там задача, конечно, пожёстче. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Суббота, 12 Январь, 2013 19:56 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
вот, можно посмотреть на текущее состояние: https://bitbucket.org/petryxa/bbcb/comm ... ea0eb2b633 (там же свежая ypk)
вся тестовая работа пока через коммандеры Compile-List
вроде я осилил парсинг структур, теперь надо разобраться с форматами чисел.
Добавил генератор без опоры на модель, добавил ему чуть ума, чтобы совсем чушь не позволял генерировать.

Интересная статистика по таймстампам модулей в прикреплённой картинке, в ней видно, что я заложил подсистему аж первого декабря, а руки дошли только после нового года, в итоге получилось, типа, семь дней, один в декабре и шесть в январе.
Любителям статистики можно посчитать количество написаных в форум(-ы) сообщений, и сравнить время, затраченное на набирание удельного объема текста (не считаем время на обдумывание, будем считать, что очень профессионалы (не я) пишут парсеры не думая :) )


Вложения:
Комментарий к файлу: имена файлов не имеют значения, но самый жирный по правкозатратам получился парсер, да.
Снимок.JPG
Снимок.JPG [ 63.67 КБ | Просмотров: 13094 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 13 Январь, 2013 10:11 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Пётр, правильно ли я понимаю, что если применять ваш парсер в режиме SAX, то он не будет использовать динамическую память (делать NEW)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 13 Январь, 2013 13:00 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ну, чисто технически я не ставил задачу обходиться совсем без NEW, я скорее предполагал, что "деревянные" структуры из YSonModels многим не нужны (но не всем), и поэтому, можно воткнуть свою реализацию Parser.Target и работать внутри неё, реагируя на сигналы парсера непосредственно.

В данной реализации NEW будет использоваться в стеке отслеживания вложенных объектов/массивов и при работе с динамическими строками (куда же без них), но, думаю, если пошаманить, то можно избавиться от динамики, но, насколько я понимаю, это приведёт ко всяким особенностям, типа ограничения глубины вложенности (с другой стороны, кому нужны хотя бы 128 уровней, не ясно :) ), и, что более важно, ограничит длину строки (в base64 бинари кодировать уже не получится).

Не знаю, надо ли подобные ограничения вносить в основную реализацию парсера, или выгоднее соорудить ещё одну, ограниченную (архитектура позволяет, мне кажется).

А как быть со скрытыми реализациями в отсутствии NEW?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 13 Январь, 2013 14:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да реализации как раз проблемы не создают - это однократный NEW, на который не нужен GC.

А со строками можно работать с помощью интерфейса Files.File над памятью... Не обращайте внимания, это мои заморочки :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 13 Январь, 2013 20:15 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Илья Ермаков писал(а):
А со строками можно работать с помощью интерфейса Files.File над памятью...
Пожалуйста, поделитесь опытом, как это делать? Вопрос насущный. Даже для маленьких временных файлов создаваемых через Files.dir.New(), как я понял, идет обращение к диску. А очень бы хотелось, как вы говорите "над памятью". Если это будет оффтоп, то можно в отдельную ветку это вынести. Думаю, не мне одному будет интересно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 13 Январь, 2013 20:57 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Иван Денисов писал(а):
Илья Ермаков писал(а):
А со строками можно работать с помощью интерфейса Files.File над памятью...
Пожалуйста, поделитесь опытом, как это делать? ... Если это будет оффтоп, то можно в отдельную ветку это вынести. Думаю, не мне одному будет интересно.
Кому интересно, предлагаю продолжить в новой теме: viewtopic.php?f=23&t=4214


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 17 Январь, 2013 22:48 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
обновил ревизию на битбакете, можно сказать, что стартовый этап завершён, RFC реализована, вроде как.
Парсер какие-то тесты проходит, правда пока везде стоят HALT, поэтому валидацию и распознавание типов ошибок там не ищите.
Как появится подходящая задача, можно будет провести разведку боем, и проверить адекватность решения и архитектуры задачам из Риал Ворлд :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Четверг, 31 Январь, 2013 21:50 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
При попытке использования парсера в стороннем компоненте сразу же всплыли интересные баги и особенности. Полезно иногда вот так брать и использовать компоненты. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсер/генератор JSON
СообщениеДобавлено: Понедельник, 27 Май, 2013 14:34 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Не прошло и полгода, как я запилил документацию. Теперь можно даже выложить компонент в коллекцию oberoncore.ru. Вдруг кому-нибудь понадобится. Правда я забыл регламент публикации. :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: YSon - Парсер/генератор JSON
СообщениеДобавлено: Воскресенье, 16 Июнь, 2013 22:52 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
В результате экспериментов с консольной linux-версией ББ имею сообщить всем потенциальным пользователям подсистемы YSon, что подсистема успешно заработала под linux без модификации исходного кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: YSon - Парсер/генератор JSON
СообщениеДобавлено: Понедельник, 17 Июнь, 2013 08:03 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Пётр Кушнир писал(а):
В результате экспериментов с консольной linux-версией ББ имею сообщить всем потенциальным пользователям подсистемы YSon, что подсистема успешно заработала под linux без модификации исходного кода.
Исходники трогать не пришлось, а потребовалась ли перекомпиляция?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: YSon - Парсер/генератор JSON
СообщениеДобавлено: Понедельник, 17 Июнь, 2013 08:33 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Бинарная совместимость в наличии.
Но перекомпилировал я по другим причинам.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB