OberonCore https://forum.oberoncore.ru/ |
|
YSon - Парсер/генератор JSON https://forum.oberoncore.ru/viewtopic.php?f=90&t=4213 |
Страница 1 из 2 |
Автор: | Пётр Кушнир [ Среда, 09 Январь, 2013 17:52 ] |
Заголовок сообщения: | YSon - Парсер/генератор JSON |
Начал пилить. У всех уже есть, чем оберон хуже Пока есть структуры аля DOM, а так же альфа-версии генератора и парсера. Парсер сделал двухуровневый, с возможностью не строить структуры, в общем, по принципу SAX для xml, видимо, в будущем, таким же будет и генератор. В итоге планирую запилить сериализатор/десериализатор всяких рекордов. (модератор, 06.06.2013) выложено в коллекции: http://oberoncore.ru/bbcc/subs/yson/ |
Автор: | Илья Ермаков [ Среда, 09 Январь, 2013 18:39 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Пётр Кушнир писал(а): Парсер сделал двухуровневый, с возможностью не строить структуры, в общем, по принципу SAX для xml Вот это правильно... |
Автор: | Пётр Кушнир [ Четверг, 10 Январь, 2013 13:23 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
попытка понимания/применения цикла Дейкстры: Код: 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) и могут встречаться только внутри кавычек. Но о кавычках положено знать только сканнеру, поэтому флаг экранированности передаём на выход вместе с символом ББ (отдельная структура показалась приемлимой). Плюс к этому, внезапно может закончиться файл |
Автор: | Борис Рюмшин [ Четверг, 10 Январь, 2013 13:32 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Главное, чтобы попроще и покомпактнее |
Автор: | Борис Рюмшин [ Четверг, 10 Январь, 2013 13:34 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Борис Рюмшин писал(а): Главное, чтобы попроще и покомпактнее Это ко всему парсеру относилось, а не к примеру))) А то мы как-то одновременно сообщения опубликовали. |
Автор: | Valery Solovey [ Четверг, 10 Январь, 2013 20:42 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Символ экранироования - это escape character. То есть, вместо screen лучше использовать esc. Так понятнее, мне кажется. |
Автор: | Пётр Кушнир [ Четверг, 10 Январь, 2013 22:26 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Valery Solovey писал(а): escape character Спасибо, как-то я проигнорировал этот факт.Борис Рюмшин писал(а): Это ко всему парсеру относилось Сейчас вот такой расклад сырцов по строкам:Код: YSonParser: 390
YSonModels: 287 YSonConverters: 172 YSonGenerator: 159 |
Автор: | Борис Рюмшин [ Четверг, 10 Январь, 2013 23:55 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Пётр, да это не так важно. Я больше про интерфейс наверно... Просто Xmlcore штука хорошая, но уж больно тяжеловесная. Хотя, там задача, конечно, пожёстче. |
Автор: | Пётр Кушнир [ Суббота, 12 Январь, 2013 19:56 ] | ||
Заголовок сообщения: | Re: Парсер/генератор JSON | ||
вот, можно посмотреть на текущее состояние: https://bitbucket.org/petryxa/bbcb/comm ... ea0eb2b633 (там же свежая ypk) вся тестовая работа пока через коммандеры Compile-List вроде я осилил парсинг структур, теперь надо разобраться с форматами чисел. Добавил генератор без опоры на модель, добавил ему чуть ума, чтобы совсем чушь не позволял генерировать. Интересная статистика по таймстампам модулей в прикреплённой картинке, в ней видно, что я заложил подсистему аж первого декабря, а руки дошли только после нового года, в итоге получилось, типа, семь дней, один в декабре и шесть в январе. Любителям статистики можно посчитать количество написаных в форум(-ы) сообщений, и сравнить время, затраченное на набирание удельного объема текста (не считаем время на обдумывание, будем считать, что очень профессионалы (не я) пишут парсеры не думая )
|
Автор: | Илья Ермаков [ Воскресенье, 13 Январь, 2013 10:11 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Пётр, правильно ли я понимаю, что если применять ваш парсер в режиме SAX, то он не будет использовать динамическую память (делать NEW)? |
Автор: | Пётр Кушнир [ Воскресенье, 13 Январь, 2013 13:00 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Ну, чисто технически я не ставил задачу обходиться совсем без NEW, я скорее предполагал, что "деревянные" структуры из YSonModels многим не нужны (но не всем), и поэтому, можно воткнуть свою реализацию Parser.Target и работать внутри неё, реагируя на сигналы парсера непосредственно. В данной реализации NEW будет использоваться в стеке отслеживания вложенных объектов/массивов и при работе с динамическими строками (куда же без них), но, думаю, если пошаманить, то можно избавиться от динамики, но, насколько я понимаю, это приведёт ко всяким особенностям, типа ограничения глубины вложенности (с другой стороны, кому нужны хотя бы 128 уровней, не ясно ), и, что более важно, ограничит длину строки (в base64 бинари кодировать уже не получится). Не знаю, надо ли подобные ограничения вносить в основную реализацию парсера, или выгоднее соорудить ещё одну, ограниченную (архитектура позволяет, мне кажется). А как быть со скрытыми реализациями в отсутствии NEW? |
Автор: | Илья Ермаков [ Воскресенье, 13 Январь, 2013 14:53 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Да реализации как раз проблемы не создают - это однократный NEW, на который не нужен GC. А со строками можно работать с помощью интерфейса Files.File над памятью... Не обращайте внимания, это мои заморочки |
Автор: | Иван Денисов [ Воскресенье, 13 Январь, 2013 20:15 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Илья Ермаков писал(а): А со строками можно работать с помощью интерфейса Files.File над памятью... Пожалуйста, поделитесь опытом, как это делать? Вопрос насущный. Даже для маленьких временных файлов создаваемых через Files.dir.New(), как я понял, идет обращение к диску. А очень бы хотелось, как вы говорите "над памятью". Если это будет оффтоп, то можно в отдельную ветку это вынести. Думаю, не мне одному будет интересно.
|
Автор: | Евгений Темиргалеев [ Воскресенье, 13 Январь, 2013 20:57 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Иван Денисов писал(а): Илья Ермаков писал(а): А со строками можно работать с помощью интерфейса Files.File над памятью... Пожалуйста, поделитесь опытом, как это делать? ... Если это будет оффтоп, то можно в отдельную ветку это вынести. Думаю, не мне одному будет интересно. |
Автор: | Пётр Кушнир [ Четверг, 17 Январь, 2013 22:48 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
обновил ревизию на битбакете, можно сказать, что стартовый этап завершён, RFC реализована, вроде как. Парсер какие-то тесты проходит, правда пока везде стоят HALT, поэтому валидацию и распознавание типов ошибок там не ищите. Как появится подходящая задача, можно будет провести разведку боем, и проверить адекватность решения и архитектуры задачам из Риал Ворлд |
Автор: | Пётр Кушнир [ Четверг, 31 Январь, 2013 21:50 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
При попытке использования парсера в стороннем компоненте сразу же всплыли интересные баги и особенности. Полезно иногда вот так брать и использовать компоненты. |
Автор: | Пётр Кушнир [ Понедельник, 27 Май, 2013 14:34 ] |
Заголовок сообщения: | Re: Парсер/генератор JSON |
Не прошло и полгода, как я запилил документацию. Теперь можно даже выложить компонент в коллекцию oberoncore.ru. Вдруг кому-нибудь понадобится. Правда я забыл регламент публикации. |
Автор: | Пётр Кушнир [ Воскресенье, 16 Июнь, 2013 22:52 ] |
Заголовок сообщения: | Re: YSon - Парсер/генератор JSON |
В результате экспериментов с консольной linux-версией ББ имею сообщить всем потенциальным пользователям подсистемы YSon, что подсистема успешно заработала под linux без модификации исходного кода. |
Автор: | Иван Кузьмицкий [ Понедельник, 17 Июнь, 2013 08:03 ] |
Заголовок сообщения: | Re: YSon - Парсер/генератор JSON |
Пётр Кушнир писал(а): В результате экспериментов с консольной linux-версией ББ имею сообщить всем потенциальным пользователям подсистемы YSon, что подсистема успешно заработала под linux без модификации исходного кода. Исходники трогать не пришлось, а потребовалась ли перекомпиляция?
|
Автор: | Пётр Кушнир [ Понедельник, 17 Июнь, 2013 08:33 ] |
Заголовок сообщения: | Re: YSon - Парсер/генератор JSON |
Бинарная совместимость в наличии. Но перекомпилировал я по другим причинам. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |