Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 07:31
Оценка: 45 (3)
Сделал свой генератор PEG-парсеров, просто для саморазвития Синтаксис выглядит примерно так (на примере JSON):
File = Sp Object Sp;
Object = "{" Sp (Property (Sp "," Sp Property)* Sp)? "}";
Property = StringConstant Sp ":" Sp Value;
Value = StringConstant / Number / Object / Array / "true" / "false" / "null";
Array = "[" Sp (Value (Sp "," Sp Value)* Sp)? "]";
Number = "-"? [0-9]+ ("." [0-9]+)? ([eE] [+-]? [0-9]+)?;
StringConstant = "\"" ("\\" ["\\] / [^"])* "\"";
Sp~ = Spacing?;
Spacing = [ \t\r\n]+;

Умеет генерировать код на C и C#.
Детальных сравнений скорости пока не проводил. JSON (в ASCII) парсится со скоростью ~80 мб/сек. Наверно можно и лучше, я оптимизацией еще не занимался как следует.
Кому-нибудь это интересно?
Re: Новый PEG-парсер. Тема интересна?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.05.11 07:32
Оценка:
Здравствуйте, tmp4857, Вы писали:

На чём написан?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 07:40
Оценка:
Здравствуйте, adontz, Вы писали:

A>На чём написан?


Сам компилятор — на C#. Но он нужен только для генерации кода парсера — сам парсер на .NET не завязан.

С кодом какая-то фигня получилась. На самом деле грамматика выглядит так:
File = Sp Object Sp;
Object = "{" Sp (Property (Sp "," Sp Property)* Sp)? "}";
Property = StringConstant Sp ":" Sp Value;
Value = StringConstant / Number / Object / Array / "true" / "false" / "null";
Array = "[" Sp (Value (Sp "," Sp Value)* Sp)? "]";
Number = "-"? [0-9]+ ("." [0-9]+)? ([eE] [+-]? [0-9]+)?;
StringConstant = "\"" ("\\" ["\\] / [^"])* "\"";
Sp~ = Spacing?;
Spacing = [ \t\r\n]+;
Re: Новый PEG-парсер. Тема интересна?
От: alvas  
Дата: 04.05.11 07:40
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Сделал свой генератор PEG-парсеров, просто для саморазвития Синтаксис выглядит примерно так (на примере JSON):

T>
T>File = Sp Object Sp;
T>Object = "{" Sp (Property (Sp "," Sp Property)* Sp)? "}";
T>Property = StringConstant Sp ":" Sp Value;
T>Value = StringConstant / Number / Object / Array / "true" / "false" / "null";
T>Array = "[" Sp (Value (Sp "," Sp Value)* Sp)? "]";
T>Number = "-"? [0-9]+ ("." [0-9]+)? ([eE] [+-]? [0-9]+)?;
T>StringConstant = "\"" ("\\" ["\\] / [^"])* "\"";
T>Sp~ = Spacing?;
T>Spacing = [ \t\r\n]+;
T>

T>Умеет генерировать код на C и C#.
T>Детальных сравнений скорости пока не проводил. JSON (в ASCII) парсится со скоростью ~80 мб/сек. Наверно можно и лучше, я оптимизацией еще не занимался как следует.
T>Кому-нибудь это интересно?

Интересно.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 07:44
Оценка:
Здравствуйте, alvas, Вы писали:

A>Интересно.


Тогда спрашивайте Сам парсер и статья будут в открытом доступе через пару недель.
Заодно приветствуются советы — с чем его лучше сравнить по скорости?
Есть идеи, какую модель лицензирования лучше использовать?
Re[3]: Новый PEG-парсер. Тема интересна?
От: ilnar Россия  
Дата: 04.05.11 07:52
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, alvas, Вы писали:


A>>Интересно.


T>Тогда спрашивайте Сам парсер и статья будут в открытом доступе через пару недель.

T>Заодно приветствуются советы — с чем его лучше сравнить по скорости?
T>Есть идеи, какую модель лицензирования лучше использовать?

тема интересна.
сравнить, к примеру, с этим http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
можно еще с JSON парсером вот этого http://ctpp.havoc.ru/doc/ru/ (сорцы http://ctpp.havoc.ru/download/ctpp2-2.6.14.tar.gz)
ну и множество реализаций приведенные тут: http://www.json.org/ в разделах С, С++, С#
Re[3]: Новый PEG-парсер. Тема интересна?
От: alvas  
Дата: 04.05.11 07:54
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, alvas, Вы писали:


A>>Интересно.


T>Тогда спрашивайте Сам парсер и статья будут в открытом доступе через пару недель.


Вопрос один. Где исходники?


T>Заодно приветствуются советы — с чем его лучше сравнить по скорости?

T>Есть идеи, какую модель лицензирования лучше использовать?

Microsoft Public License (Ms-PL) или BSD License
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[4]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 07:58
Оценка: +1
Здравствуйте, alvas, Вы писали:

A>Вопрос один. Где исходники?


Будет, всё будет

A>Microsoft Public License (Ms-PL) или BSD License


Почему именно эти?
Re[4]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 08:16
Оценка:
Здравствуйте, ilnar, Вы писали:

I>ну и множество реализаций приведенные тут: http://www.json.org/ в разделах С, С++, С#


Вообще-то я имел в виду генераторы парсеров, а не специализированные ручные парсеры
Сравнение производительности с регулярными выражениями кому-нибудь интересно?
Re[5]: Новый PEG-парсер. Тема интересна?
От: alvas  
Дата: 04.05.11 08:18
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, alvas, Вы писали:


A>>Вопрос один. Где исходники?


T>Будет, всё будет


Вот когда будут тогда и вопросы появятся

A>>Microsoft Public License (Ms-PL) или BSD License


T>Почему именно эти?


Мое дело предложить. Что вы хотите чтобы ваша лицензия позволяла/не позволяла?
Тогда можно будет возможно и лицензию посоветовать.
В правильно составленном вопросе, как говорится, 50% ответа.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[5]: Новый PEG-парсер. Тема интересна?
От: hardcase Пират http://nemerle.org
Дата: 04.05.11 08:22
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, ilnar, Вы писали:


I>>ну и множество реализаций приведенные тут: http://www.json.org/ в разделах С, С++, С#


T>Вообще-то я имел в виду генераторы парсеров, а не специализированные ручные парсеры


Можно с Nemerle.Peg сравнить, JSON парсер с построением AST у нас есть.
С рукопашными тоже стоит сравнивать. Иной раз генератор может порвать в клочья рукописные (так как для рукопашной реализации не доступна куча оптимизаций).


T>Сравнение производительности с регулярными выражениями кому-нибудь интересно?


Вы знатный извращенец, если хотите JSON парсить регулярками
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Новый PEG-парсер. Тема интересна?
От: hardcase Пират http://nemerle.org
Дата: 04.05.11 08:25
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, ilnar, Вы писали:


I>>ну и множество реализаций приведенные тут: http://www.json.org/ в разделах С, С++, С#


T>Вообще-то я имел в виду генераторы парсеров, а не специализированные ручные парсеры



Nemerle.Peg грамматика JSON: тут.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Новый PEG-парсер. Тема интересна?
От: Воронков Василий Россия  
Дата: 04.05.11 08:26
Оценка:
Здравствуйте, tmp4857, Вы писали:

I>>ну и множество реализаций приведенные тут: http://www.json.org/ в разделах С, С++, С#

T>Вообще-то я имел в виду генераторы парсеров, а не специализированные ручные парсеры
T>Сравнение производительности с регулярными выражениями кому-нибудь интересно?

Сравни с Coco/R, если несложно.
Re[6]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 08:36
Оценка:
Здравствуйте, alvas, Вы писали:

A>Вот когда будут тогда и вопросы появятся


Сначала надо решить вопрос с лицензией

A>Мое дело предложить. Что вы хотите чтобы ваша лицензия позволяла/не позволяла?

A>Тогда можно будет возможно и лицензию посоветовать.
A>В правильно составленном вопросе, как говорится, 50% ответа.

Мое основное пожелание — чтобы для некоммерческих проектов позволять использовать бесплатно, а с коммерческих можно было запросить деньги. Да-да, я знаю, я ужасно корыстен... се ля ви
Re[6]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 08:40
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Вы знатный извращенец, если хотите JSON парсить регулярками


Зачем JSON регулярками? На более простых примерах, конечно. Я пока сравнил только с .NET Regex, и мой парсер порвал его в клочья. Даже если генерить код для .NET
Re[7]: Новый PEG-парсер. Тема интересна?
От: alvas  
Дата: 04.05.11 08:41
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, alvas, Вы писали:


A>>Вот когда будут тогда и вопросы появятся


T>Сначала надо решить вопрос с лицензией


A>>Мое дело предложить. Что вы хотите чтобы ваша лицензия позволяла/не позволяла?

A>>Тогда можно будет возможно и лицензию посоветовать.
A>>В правильно составленном вопросе, как говорится, 50% ответа.

T>Мое основное пожелание — чтобы для некоммерческих проектов позволять использовать бесплатно, а с коммерческих можно было запросить деньги. Да-да, я знаю, я ужасно корыстен... се ля ви


Тогда можно под двойной лицензией. Примеров в интернете куча.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[7]: Новый PEG-парсер. Тема интересна?
От: alvas  
Дата: 04.05.11 08:44
Оценка:
Здравствуйте, tmp4857, Вы писали:

T>Здравствуйте, hardcase, Вы писали:


H>>Вы знатный извращенец, если хотите JSON парсить регулярками


T>Зачем JSON регулярками? На более простых примерах, конечно. Я пока сравнил только с .NET Regex, и мой парсер порвал его в клочья. Даже если генерить код для .NET


1. Вот и гуд. Тогда и сравнивай с .NET Regex из джейсоном, например.
2. Что есть "порвал его в клочья"? 10% или 10000%?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: Новый PEG-парсер. Тема интересна?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.05.11 08:45
Оценка:
Здравствуйте, tmp4857, Вы писали:

Меня интересует скорость работы самого компилятора. Достаточно ли он быстр для интерактивного редактирвоания грамматики?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Новый PEG-парсер. Тема интересна?
От: tmp4857  
Дата: 04.05.11 08:46
Оценка:
Здравствуйте, alvas, Вы писали:

A>Тогда можно под двойной лицензией. Примеров в интернете куча.


Какие? Я слышал только про Trolltech, но у них все не очень весело закончилось
Re[4]: Новый PEG-парсер. Тема интересна?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.05.11 08:48
Оценка:
Здравствуйте, alvas, Вы писали:

A>Microsoft Public License (Ms-PL) или BSD License


Я за BSD 3-clause.
A journey of a thousand miles must begin with a single step © Lau Tsu
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.