Здравствуйте, Marty, Вы писали:
M>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать
Между плюсами и калькулятором у тебя нет промежуточных положений?
Здравствуйте, Ночной Смотрящий, Вы писали:
M>>Ну, например, потому, что калькулятор я и в рукопашную за полдня напишу рекурсивным спуском,
НС>А генератором — за полчаса. И суть не в написать, а в научиться.
Научится — дело хорошее, но если задачу не решает, то можно и отложить.
M>> а плюсики хочу парсить для своего пет-проекта,
НС>Тебе уже сказали несколько человек, что плюсы это очень плохой вариант.
И что теперь? Завернутся в простыню и ползти на кладбище?
Здравствуйте, Marty, Вы писали:
N>>В ANTLR, конечно, какой-то пример, но минимальный; полный парсер, чтобы получить хотя бы AST, должен включать в себя из-за описанных свойств интерпретатор логики шаблонов (а вслед этим и значительного подмножества языка). M>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать
Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут.
N>>Лучше вызывайте clang, он за вас всё сделает M>Это скучно
Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают...
Да, лучше взять другую задачу, тут я полностью согласен.
Здравствуйте, Ночной Смотрящий, Вы писали:
M>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать
НС>Между плюсами и калькулятором у тебя нет промежуточных положений?
На текущий момент практически нужных — нет. Но обещаю тебе, когда появятся — обязательно сделаю ещё один подход к снаряду.
Здравствуйте, Ночной Смотрящий, Вы писали:
M>>Да у нас уже технологии отлажены, никто менять ничего не будет. Только улучшать
НС>Ты сам попросил примеры.
А можно контекст, где я что просил? А то я тут немного его видимо потерял. Вроде примеров стеков протоколов я не просил
Здравствуйте, netch80, Вы писали:
M>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать
N>Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут.
Ну только оно уже работает. Ну ты понил, да?
N>Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают...
Пару десятков человеко-лет? Я столько не проживу
Колоризер для 03их плюсиков я еще в первой половине нулевых написал, месяц, ну, может два, практически со студенческой скамьи. И да, он умел в typedef, struct/class и подсвечивал их отдельно другим цветом. Сейчас плюсики несколько усложнились, но и я уже не тот
N>Да, лучше взять другую задачу, тут я полностью согласен.
Так мне эта нужна. Вот я и подумал, может, мне инструменты помогут
Здравствуйте, Marty, Вы писали:
M>>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать N>>Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут. M>Ну только оно уже работает. Ну ты понил, да?
Зато проба реализации на другом средстве обычно помогает находить баги и проблемы дизайна.
N>>Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают... M>Пару десятков человеко-лет? Я столько не проживу M>Колоризер для 03их плюсиков я еще в первой половине нулевых написал, месяц, ну, может два, практически со студенческой скамьи. И да, он умел в typedef, struct/class и подсвечивал их отдельно другим цветом. Сейчас плюсики несколько усложнились, но и я уже не тот
Ну если сделать на уровне _до_ того, как начнут действовать все описанные проблемы — то можно и на ANTLR и вообще на чём угодно.
Только хватит ли тебе этого. И я по нынешнему состоянию и не уверен, что это вообще возможно.
N>>Да, лучше взять другую задачу, тут я полностью согласен. M>Так мне эта нужна. Вот я и подумал, может, мне инструменты помогут
Здравствуйте, Marty, Вы писали:
НС>>А генератором — за полчаса. И суть не в написать, а в научиться. M>Научится — дело хорошее, но если задачу не решает, то можно и отложить.
И потом опять сделать ту же ошибку?
M>>> а плюсики хочу парсить для своего пет-проекта, НС>>Тебе уже сказали несколько человек, что плюсы это очень плохой вариант. M>И что теперь? Завернутся в простыню и ползти на кладбище?
Начинать с более простых задач. Не нравятся тулы — попробуй руками реализовать хотя бы парсер Пратта. Работы на пару часов, зато потом свой DSL полноценными выражениями сможешь расширить.
Здравствуйте, Marty, Вы писали:
M>На текущий момент практически нужных — нет. Но обещаю тебе, когда появятся — обязательно сделаю ещё один подход к снаряду.
Тут есть опасность того, что ты сейчас считаешь написание нормальных парсеров чем то очень сложным и не видишь очевидных мест применения.
Здравствуйте, Marty, Вы писали:
M>Ну только оно уже работает. Ну ты понил, да?
Во-первых там могут быть ошибки, во-вторых когда ты опишешь грамматику у тебя будет более ясное понимание где у тебя узкие места и в какую сторону можно двигаться.
Здравствуйте, Marty, Вы писали:
НС>>Ты сам попросил примеры. M>А можно контекст, где я что просил? А то я тут немного его видимо потерял. Вроде примеров стеков протоколов я не просил
Здравствуйте, Marty, Вы писали:
M>Запилил статейку на эту тему со своими практиками, предлагаю обсудить. Но — с конструктивом, а не просто: "ты лошара неграмотная, я тебя на работу не возьму". Хочу понять, как таки это делать правильно и быстро.
Увидил топик, не смог пройти мимо. Итак, по моему опыту:
Самый простой и полезный DSL — это DSL кодом. Т.е. DSL представляет из себя вызовы некоторых, написанных заранее функций, реализация которых собирает в памяти структуру данных (тот же AST), которая дальше процессится какой-то логикой и генератором
Для текстового DSL я применяю самописные рекурсивные нисходящие парсеры https://en.wikipedia.org/wiki/Recursive_descent_parser
Очень рекомендую, эта техника написания парсеров проста в освоении и исключительно полезна.
Простые генераторы отлично пишутся кодом вперемешку со строками, для более сложных нужен любимый template engine, пачка шаблонов и обязательно отдельная модель для использования в этих шаблонах.
Здравствуйте, Михaил, Вы писали:
М>Случайно зашёл в дискуссию и, будучи не в теме, стало любопытно. Можно в двух словах, в каких случаях оптимально создание нового дсл?
Когда ты хочешь решать задачу не на языке программирования, а на языке задачи.
Например, если ты пишешь шахматную программу, и хочешь изъясняться на языке ходов и позиций, а не циклов и подпрограмм.
Здравствуйте, vdimas, Вы писали:
V>Первый Фортран не далеко от такого ушел (до введения типизации):
В первом фортране оператор цикла мог выглядеть так:
DO I = 10, 100
А мог и так, потому что пробелы в нем не были значимы совсем:
DOI = 10, 100
А присваивание могло выглядеть так:
DOI = 10
Потому, что никто не запрещал назвать переменную DOI. Поэтому не дочитав до запятой, компилятор Фортрана даже и не знал, компилирует он присваивание или оператор цикла.
Насколько я понимаю, синтаксис Фортрана вообще нельзя описать контекстно-свободной грамматикой. А ты говоришь, хеш-таблицы...