[ANTLR] Помогите, пожалуйста, оценить время разработки своего DSL
ANTLR не пробовал, пробовали на работе re2c + lemon. как раз дописываем интерпретатор своего языка (осталось допилить операторы for, foreach и деструкторы - их оставили на конец). довольно сложно было понять логику lemon. с re2c все довольно просто.
в итоге на собственный язык сблекджеком и шлюхами объектами и наследованием потрачено ориентировочно 3+ месяца на 2 человек.
в итоге на собственный язык с
в итоге на собственный язык с блекджеком и шлюхами объектами и наследованием потрачено ориентировочно 3+ месяца на 2 человекСпасибо, что поделились своим опытом!
Надеюсь, время разработки прототипа моего DSL (без пользовательских классов и объектов, без наследования, со статической типизацией и парой управляющих конструкций) окажется хотя бы 10 раз быстрее ...
который траслирует код,транслирует во что?
транслирует во что?Пока достаточно трансляции в Java-код

Чернов такое в качестве практического задания давал. Срок был семестр, но чистого времени значительно меньше.
вообще, полноценный прототип парсера с интерпретацией (или трансляцией) в режиме 1 к 1: одной конструкции языка соответствует один вариант интерпретации или трансляции - можно поднять за человекодень (если инструменты знакомы).
дальше время будет уходить:
1) человеческие сообщения об ошибках разбора - времени будет нужно раз в 5 больше (человеко-неделя)
2) всякие улучшения и оптимизации, которые вместо просто режима 1 к 1 требуют более сложные преобразования - здесь времени требуется раз в 20 больше (но, вообще, можно улучшать до бесконечности) (от нескольких человеко-месяцев)
3) зачистка хвостов, поддержка всяких вырожденных случаев и т.д. - времени раз в 30 больше (человеко-месяцы)
4) подсказки на лету при редактировании, отладчик - ближе к человеко-году (в первую очередь, из-за того, что необходимо мгновенное время исполнения)
дальше время будет уходить:
1) человеческие сообщения об ошибках разбора - времени будет нужно раз в 5 больше (человеко-неделя)
2) всякие улучшения и оптимизации, которые вместо просто режима 1 к 1 требуют более сложные преобразования - здесь времени требуется раз в 20 больше (но, вообще, можно улучшать до бесконечности) (от нескольких человеко-месяцев)
3) зачистка хвостов, поддержка всяких вырожденных случаев и т.д. - времени раз в 30 больше (человеко-месяцы)
4) подсказки на лету при редактировании, отладчик - ближе к человеко-году (в первую очередь, из-за того, что необходимо мгновенное время исполнения)
вообще, полноценный прототип парсера с интерпретацией (или трансляцией) ... можно поднять за человекодень (если инструменты знакомы).Большое спасибо за подробную оценку трудозатрат и оптимистический прогноз времени создания прототипа!
Теперь лучше сознаю долю затрат времени на изучение инструмента (ANTLR) в первое время работы над DSL.в твоем случае, время скорее всего будет утекать на ошибки проектирования.
задача сама по себе сложная, и сильно зависит от правильности проектирования.
соответственно, если уже написал парсер один раз успешно, то следующий такого же уровня - пишется уже очень быстро.
но вот первый раз можно долго потрахаться с подбором правильной архитектуры, и обходом подводных камней.
уровни сложности парсеров - что-то типа:
1. просто код (типа калькулятора)
2. переменные
3. типы (структурные)
4. ооп
5. фя
6. выведение типов
задача сама по себе сложная, и сильно зависит от правильности проектирования.
соответственно, если уже написал парсер один раз успешно, то следующий такого же уровня - пишется уже очень быстро.
но вот первый раз можно долго потрахаться с подбором правильной архитектуры, и обходом подводных камней.
уровни сложности парсеров - что-то типа:
1. просто код (типа калькулятора)
2. переменные
3. типы (структурные)
4. ооп
5. фя
6. выведение типов
Пока достаточно трансляции в Java-кодэто кстати плюс, можно большую часть всякой херотени переложить на саму Java-у
задача сама по себе сложная, и сильно зависит от правильности проектирования
можно большую часть всякой херотени переложить на саму Java-уСпасибо за Ваши комментарии! Буду учитывать при разработке

если на ANTLRе будете делать, постарайтесь сразу свою грамматику спроектировать так, чтобы не было конфликтов, которые сложно разрешать LL(k) парсером
кстати плюсуюсь, распознавание конфликтов автогенераторами - вообще зло адское.
6. выведение типовНа выходных игрался, за час-два пишется.
На выходных игрался, за час-два пишется.какого плана?
Может быть кто-нибудь из форумчан занимался разработкой собственного DSLпредположу, что , где занимается языком ZUSUL (Ze Ugly Stupid Useless Language
)Мы тогда были студентами Чернова и писали свои конпеляторы собственных языков в ассемблер его виртуальной машины за 2-4 недели где-то. То было лет 9 назад, с тех пор ANTLR сильно изменился.
Сейчас я не вижу смысла его использовать и подобные вещи пишу на окамле, используя мемоизирующие парсер-комбинаторы.
Сейчас я не вижу смысла его использовать и подобные вещи пишу на окамле, используя мемоизирующие парсер-комбинаторы.
Не пробовал, кстати, antlr и не умею писать конпеляторы, но "можно назвать DSL" написал на окамле с ocamlyacc/ocamllexx за день.
Кстати, раз уж зашла тема, посоветуйте полному нубу в данном вопросе, где можно на пальцах прочитать про различи всех эти LL/LR, восходящих и нисходящих разборов и т.п.
«Построение компиляторов» Вирта читал, но полного понимания, чем эти анализаторы отличаются, так и нет. Хочется, чтобы было объяснено с примерами, где что не будет работать, в чём разница — короче, для идиотов.
«Построение компиляторов» Вирта читал, но полного понимания, чем эти анализаторы отличаются, так и нет. Хочется, чтобы было объяснено с примерами, где что не будет работать, в чём разница — короче, для идиотов.
Сейчас я не вижу смысла его использоватьто-то я удивился, зачем использовать такую страшилку

книжка с драконом - считается библией компиляторостроения
Оставить комментарий
nikola1956
Никогда раньше не сталкивался с разработкой "языковых" приложений. Но на работе возникла необходимость разработки собственного внешнего предметно-ориентированнного языка. В принципе с "дизайном" языка, средой разработки на этом языке и задачами, под которые этот язык должен быть "заточен", более-менее определились. Осталался вопрос о сроках разработки.Но здесь меня интересуют не сроки разработки вообще, а только примерная оценка времени реализации с использованием языка ANTLR (это предметно-ориентированный язык для разработки парсеров-лексеров и вообще языковых приложений) простейшей рабочей версии транслятора, который траслирует код, написанный на простейшей версии моего DSL (функции, инструкции присваивания, несколько фиксированных типов, if, while — пока всё).
Может быть кто-нибудь из форумчан занимался разработкой собственного DSL с использованием ANTLR и может подсказать примерное время создания "прототипа" подобного языкового приложения ? Одна, две недели или больше ? И на сколько быстро происходить освоение ANTLR ?