Re[8]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 09.07.10 12:41
Оценка:
Здравствуйте, hardcase, Вы писали:

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


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


H>>>Да. Компиляция парсера этой грамматики в которую я добавил весь этот красивый спектр операторов теперь занимает чуть больше 10 минут (дома машинка пошустрее и считает за 7 минут).


VD>>А не смотрел профайлером что занимает основное время?


H>Судя по тому, что я увидел в профайлере, все время времени компилятор проводит в OptimizeRule, а имеенно в CanInline, которая похоже имеет жуткую полиномиальную сложность.



Исправил в r8986. Теперь оно так долго не занимается прогревом процессора.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 09.07.10 13:02
Оценка: 132 (1)
Здравствуйте, hardcase, Вы писали:


H>Исправил в r8986. Теперь оно так долго не занимается прогревом процессора.


От этой жары уже и соображаю плохо... Сделал лучше: r8987.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 14:16
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Судя по тому, что я увидел в профайлере, все время времени компилятор проводит в OptimizeRule, а имеенно в CanInline, которая похоже имеет жуткую полиномиальную сложность.


А попробуй как ее просто отключить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 14:18
Оценка:
Здравствуйте, hardcase, Вы писали:

H>От этой жары уже и соображаю плохо... Сделал лучше: r8987.


А что там было то?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 14:26
Оценка:
Здравствуйте, hardcase, Вы писали:

H>>Исправил в r8986. Теперь оно так долго не занимается прогревом процессора.


H>От этой жары уже и соображаю плохо... Сделал лучше: r8987.


А после исправления что занимает основное время (с точки зрения профайлера)?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 15:38
Оценка:
Здравствуйте, hardcase, Вы писали:

H>>Исправил в r8986. Теперь оно так долго не занимается прогревом процессора.


H>От этой жары уже и соображаю плохо... Сделал лучше: r8987.


Кстати, проект ты в ШарпДевелопе создавал?

С ним явно что-то не так. В студии какие-то странные проблемы.
Я его (от греха) пересоздал с помощью VS.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 15:51
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Кстати еще смущает размер кода. Теперь сборка с парсером стремится к 400КБ. Это нормально?


Удалил строки используемые для отладки, стало ~300Кб.

Для радикального уменьшения надо менять генерацию кода для терминальных правил (тех что разбирают отдельные символы и не содержат рекурсии). Их можно превратить в ДКА или даже специализированный код. Например, для распознавания "строк" (последовательного набора символов) можно применять сравнение строк или хотя бы более оптимальный код генерировать (без откатов и доп.проверок длинны строки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 18:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Интересу ради решил попробовать в деле генератор парсеров.

H>Задачу выбрал синтетическую — разбор некоего подмножества JavaScript.

Это! Может лучше займешься созданием грамматики для C#? Нам это дело намного больше нужно. Тогда и конвертер на его базе организовали бы, и даже возможность включать в немерловый проект C#-исходников.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 09.07.10 20:36
Оценка:
Здравствуйте, VladD2, Вы писали:

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


H>>Интересу ради решил попробовать в деле генератор парсеров.

H>>Задачу выбрал синтетическую — разбор некоего подмножества JavaScript.

VD>Это! Может лучше займешься созданием грамматики для C#? Нам это дело намного больше нужно. Тогда и конвертер на его базе организовали бы, и даже возможность включать в немерловый проект C#-исходников.


Можно попробовать в принципе попробовать. Не думаю, что сильно сложно будет, просто рутинного кода мноооого.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 09.07.10 20:38
Оценка:
Здравствуйте, VladD2, Вы писали:

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


H>>>Исправил в r8986. Теперь оно так долго не занимается прогревом процессора.


H>>От этой жары уже и соображаю плохо... Сделал лучше: r8987.


VD>А после исправления что занимает основное время (с точки зрения профайлера)?


Нормально стало вроде. Других задержек пока не замечено.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.10 21:16
Оценка:
Здравствуйте, hardcase, Вы писали:

VD>>Это! Может лучше займешься созданием грамматики для C#? Нам это дело намного больше нужно. Тогда и конвертер на его базе организовали бы, и даже возможность включать в немерловый проект C#-исходников.


H>Можно попробовать в принципе попробовать.


Давай! Это будет очень полезно. А я постараюсь сосредоточиться на развитии генератора парсеров.

H>Не думаю, что сильно сложно будет, просто рутинного кода мноооого.


+1

ЗЫ

Ко всему прочему это будет первым шагом к новой версии Немерла, так как это будет пример реально достаточно большого размера, чтобы проверить все что нужно проверить (производительность, сложность, проблемы, ...).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.07.10 19:01
Оценка: 16 (1)
Здравствуйте, hardcase, Вы писали:

H>Возникли два вопроса:


H>1) Как обрабатывать ошибки?


В ревизии 9007 я залил небольшое расширение парсера. Теперь в парсер добавляется свойство MaxRollbackPos. В этом свойстве запоминается максимальная позиция в которой был произведен откат. Фактически — это позиция в которой отбламался парсер. Эту позицию можно использовать для выдачи "общего" сообщения об ошибке, например, "Недопустимый токен".

В будущем, я думаю, нужно в этих же позициях запоминать так же некий идентификатор правила на котором произошел облом. Тогда можно будет формировать более осмысленные сообщения об ошибок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [PEG] Добавил в сниппеты еще один пример.
От: catbert  
Дата: 16.07.10 17:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В ревизии 9007 я залил небольшое расширение парсера. Теперь в парсер добавляется свойство MaxRollbackPos. В этом свойстве запоминается максимальная позиция в которой был произведен откат. Фактически — это позиция в которой отбламался парсер. Эту позицию можно использовать для выдачи "общего" сообщения об ошибке, например, "Недопустимый токен".


Кстати, как в текущем парсере дела с "точками отсечения"? Ну, теми, после отката до которых парсер вываливается с ошибками.
Re[3]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.07.10 22:49
Оценка:
Здравствуйте, catbert, Вы писали:

C>Кстати, как в текущем парсере дела с "точками отсечения"? Ну, теми, после отката до которых парсер вываливается с ошибками.


Никак, но можно создать правило перехватывающее любой ввод и выдать в нем ошибку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.10 14:50
Оценка:
Здравствуйте, hardcase, Вы писали:

VD>>Это! Может лучше займешься созданием грамматики для C#? Нам это дело намного больше нужно. Тогда и конвертер на его базе организовали бы, и даже возможность включать в немерловый проект C#-исходников.


H>Можно попробовать в принципе попробовать. Не думаю, что сильно сложно будет, просто рутинного кода мноооого.


Ну, так как?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 25.07.10 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, так как?


К сожалению прошедшую неделю был крайне далек от какого-либо компьютера
Буду фигачить на этой.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.07.10 14:10
Оценка:
Здравствуйте, hardcase, Вы писали:

H>К сожалению прошедшую неделю был крайне далек от какого-либо компьютера

H>Буду фигачить на этой.

Давай. Причем не стесняйся дергать меня (можно по Скайпу, в нем у меня логин VladD2), если что-то не так будет с PegGrammar. Это важно для будущей версии компилятора.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 01.08.10 11:15
Оценка:
Здравствуйте, VladD2, Вы писали:

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


H>>К сожалению прошедшую неделю был крайне далек от какого-либо компьютера

H>>Буду фигачить на этой.

VD>Давай. Причем не стесняйся дергать меня (можно по Скайпу, в нем у меня логин VladD2), если что-то не так будет с PegGrammar. Это важно для будущей версии компилятора.


Сделал начальный коммит грамматики и простую систему тестирования правил.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: [PEG] Добавил в сниппеты еще один пример.
От: hardcase Пират http://nemerle.org
Дата: 02.08.10 11:31
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Сделал начальный коммит грамматики и простую систему тестирования правил.


Парсер теперь распознает объявления (покачто без генерирования AST) всевозможных типов (в грамматике около 200 правил).
Сборка с парсером имеет размер в полтора мегабайта.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: [PEG] Добавил в сниппеты еще один пример.
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.10 03:41
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Сделал начальный коммит грамматики и простую систему тестирования правил.


По поводу модификаторов (public, new, static, ...).

Не стоит описывать свой список для каждого типа деклараций. Людям свойственно ошибаться. Они часто лепят идентификаторы не по месту. И при этом им нужны внятные сообщения об ошибках. Если же забить их в грамматику, то сообщение будет типа "не ожидаемый идентификатор".

Лучше сделать единый список идентификаторов и проверять их в семантическом действии (обработчике). Или после правильного списка модификаторов давать полный список и при его сопоставлении выдавать ошибку (это будет чуть медленнее).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.