SlideShare a Scribd company logo
Свой протокол и кросс-
платформенные парсеры
за 30 минут
Когда JSON уже не подходит
Виктор Грищенко Синьор помидор realm.io
Мно-го-плат-фор-мен-ность!!!
http://seriot.ch/parsing_json.php
Формальные языки
С++
HTML
CSS
Парcеры
<(w+)s*(w+=“[^”]*”)>
Байтики
message Person {
required string user_name = 1;
optional int64 favourite_number = 2;
repeated string interests = 3;
}
Грамматики
const INVENTORY_JSON = new Grammar({
FLOAT: /d{1,16}(.d{1,15})?/,
INT: /d{1,16}/,
STRING: /"(.|[^"])*"/,
IDKV: '""id"" :STRING',
NAMEKV: '""name"" :STRING',
QUANTKV:'""quantity"" :INT',
PRICEKV:'""price"" :FLOAT',
ENTRY: '{ IDKV ,NAMEKV? ,QUANTKV? ,PRICEKV? }',
LIST: '[ ENTRY ,ENTRY* ]'
});
{"id":"A345", "name":"teddy bear", "price": 5.45}
,ENTRY*
https://www.google.ru/search?q=regex+site:xkcd.com
https://alf.nu/RegexGolf
Регулярки
/^s*[s*({s*(?:(?:"id"s*):s*(?:"(?:.|[^"])*"))
s*(?:,s*(?:(?:"name"s*):s*(?:"(?:.|[^"])*")))?
s*(?:,s*(?:(?:"quantity"s*):s*(?:d+)))?s*(?:,
s*(?:(?:"price"s*):s*(?:d+(?:.d{1,15})?)))?
s*}s*)((?:,s*{s*(?:(?:"id"s*):s*(?:"(?:.|
[^"])*"))s*(?:,s*(?:(?:"name"s*):s*(?:"(?:.|
[^"])*")))?s*(?:,s*(?:(?:"quantity"s*):s*(?:
d+)))?s*(?:,s*(?:(?:"price"s*):s*(?:d+(?:.
d{1,15})?)))?s*}s*)*)s*]s*$/m
Бенчи
size: 200000 entries
length: 10200000chars
JSON.parse 189ms
Grammar.is 95ms
Grammar.split 122ms
Недопротобуф
#1MOC-Agritzko1.lww@1MOC02-Agritzko1:name=“teddy bear”
# 1MOC - Agritzko1
. lww
@ 1MOC02 - Agritzko1
: name
= “teddy bear”
Immutable AST
@gritzko
Виктор Грищенко Синьор помидор realm.io
Чо?
victor.grishchenko
github.com/gritzko/
regular-grammar
gritzko@ya.ru

More Related Content

Similar to Виктор Грищенко

CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
 
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
Омские ИТ-субботники
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Ontico
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav
turbanoff
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 

Similar to Виктор Грищенко (20)

CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
 
Java(script) on JVM
Java(script) on JVMJava(script) on JVM
Java(script) on JVM
 
Java(Script) on JVM
Java(Script) on JVMJava(Script) on JVM
Java(Script) on JVM
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Net 3.0 & Linq
Net 3.0 & LinqNet 3.0 & Linq
Net 3.0 & Linq
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
L10N
L10NL10N
L10N
 
Шаблонизация
ШаблонизацияШаблонизация
Шаблонизация
 
Тодуа. Сериализация и язык YAML
Тодуа. Сериализация и язык YAMLТодуа. Сериализация и язык YAML
Тодуа. Сериализация и язык YAML
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
 
20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav
 
Avito / SPA Meetup 2
Avito / SPA Meetup 2Avito / SPA Meetup 2
Avito / SPA Meetup 2
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 

More from CodeFest

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Виктор Грищенко