[ANTLR] Помогите, пожалуйста, оценить время разработки своего DSL
в итоге на собственный язык с
в итоге на собственный язык с блекджеком и шлюхами объектами и наследованием потрачено ориентировочно 3+ месяца на 2 человекСпасибо, что поделились своим опытом!
Надеюсь, время разработки прототипа моего DSL (без пользовательских классов и объектов, без наследования, со статической типизацией и парой управляющих конструкций) окажется хотя бы 10 раз быстрее ...
который траслирует код,транслирует во что?
транслирует во что?Пока достаточно трансляции в Java-код
Чернов такое в качестве практического задания давал. Срок был семестр, но чистого времени значительно меньше.
дальше время будет уходить:
1) человеческие сообщения об ошибках разбора - времени будет нужно раз в 5 больше (человеко-неделя)
2) всякие улучшения и оптимизации, которые вместо просто режима 1 к 1 требуют более сложные преобразования - здесь времени требуется раз в 20 больше (но, вообще, можно улучшать до бесконечности) (от нескольких человеко-месяцев)
3) зачистка хвостов, поддержка всяких вырожденных случаев и т.д. - времени раз в 30 больше (человеко-месяцы)
4) подсказки на лету при редактировании, отладчик - ближе к человеко-году (в первую очередь, из-за того, что необходимо мгновенное время исполнения)
вообще, полноценный прототип парсера с интерпретацией (или трансляцией) ... можно поднять за человекодень (если инструменты знакомы).Большое спасибо за подробную оценку трудозатрат и оптимистический прогноз времени создания прототипа! Теперь лучше сознаю долю затрат времени на изучение инструмента (ANTLR) в первое время работы над DSL.
задача сама по себе сложная, и сильно зависит от правильности проектирования.
соответственно, если уже написал парсер один раз успешно, то следующий такого же уровня - пишется уже очень быстро.
но вот первый раз можно долго потрахаться с подбором правильной архитектуры, и обходом подводных камней.
уровни сложности парсеров - что-то типа:
1. просто код (типа калькулятора)
2. переменные
3. типы (структурные)
4. ооп
5. фя
6. выведение типов
Пока достаточно трансляции в Java-кодэто кстати плюс, можно большую часть всякой херотени переложить на саму Java-у
задача сама по себе сложная, и сильно зависит от правильности проектирования
можно большую часть всякой херотени переложить на саму Java-уСпасибо за Ваши комментарии! Буду учитывать при разработке
если на ANTLRе будете делать, постарайтесь сразу свою грамматику спроектировать так, чтобы не было конфликтов, которые сложно разрешать LL(k) парсером
кстати плюсуюсь, распознавание конфликтов автогенераторами - вообще зло адское.
6. выведение типовНа выходных игрался, за час-два пишется.
На выходных игрался, за час-два пишется.какого плана?
Может быть кто-нибудь из форумчан занимался разработкой собственного DSLпредположу, что , где занимается языком ZUSUL (Ze Ugly Stupid Useless Language )
Сейчас я не вижу смысла его использовать и подобные вещи пишу на окамле, используя мемоизирующие парсер-комбинаторы.
Не пробовал, кстати, antlr и не умею писать конпеляторы, но "можно назвать DSL" написал на окамле с ocamlyacc/ocamllexx за день.
«Построение компиляторов» Вирта читал, но полного понимания, чем эти анализаторы отличаются, так и нет. Хочется, чтобы было объяснено с примерами, где что не будет работать, в чём разница — короче, для идиотов.
Сейчас я не вижу смысла его использоватьто-то я удивился, зачем использовать такую страшилку
книжка с драконом - считается библией компиляторостроения
Оставить комментарий
nikola1956
Никогда раньше не сталкивался с разработкой "языковых" приложений. Но на работе возникла необходимость разработки собственного внешнего предметно-ориентированнного языка. В принципе с "дизайном" языка, средой разработки на этом языке и задачами, под которые этот язык должен быть "заточен", более-менее определились. Осталался вопрос о сроках разработки.Но здесь меня интересуют не сроки разработки вообще, а только примерная оценка времени реализации с использованием языка ANTLR (это предметно-ориентированный язык для разработки парсеров-лексеров и вообще языковых приложений) простейшей рабочей версии транслятора, который траслирует код, написанный на простейшей версии моего DSL (функции, инструкции присваивания, несколько фиксированных типов, if, while — пока всё).
Может быть кто-нибудь из форумчан занимался разработкой собственного DSL с использованием ANTLR и может подсказать примерное время создания "прототипа" подобного языкового приложения ? Одна, две недели или больше ? И на сколько быстро происходить освоение ANTLR ?