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 уровней, не ясно ![]() Не знаю, надо ли подобные ограничения вносить в основную реализацию парсера, или выгоднее соорудить ещё одну, ограниченную (архитектура позволяет, мне кажется). А как быть со скрытыми реализациями в отсутствии 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/ |