Re[7]: Написание своего DSL
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.09.20 20:01
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

M>>Давным давно, в одном НИИодной далёкой галактике, в рамках реализации проекта для вояк кто-то из разработчиков потыкал палочкой OPENcan. Присовывать какую-либо открытую реализацию OPENcan для микроконтроллеров в проект для вояк никто не решился, и по мотивам был создан свой стек протоколов для CAN, RS-232/UART и RS-485.


НС>Если тебе в протоколы, то, возможно, имеет смысл для вдохновения посмотреть на https://developers.google.com/protocol-buffers/docs/proto. Или на https://www.microsoft.com/en-us/research/project/spec/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fspecsharp


Да у нас уже технологии отлажены, никто менять ничего не будет. Только улучшать
Маньяк Робокряк колесит по городу
Re[9]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 13.09.20 20:06
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну, например, потому, что калькулятор я и в рукопашную за полдня напишу рекурсивным спуском,


А генератором — за полчаса. И суть не в написать, а в научиться.

M> а плюсики хочу парсить для своего пет-проекта,


Тебе уже сказали несколько человек, что плюсы это очень плохой вариант.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 13.09.20 20:06
Оценка:
Здравствуйте, Marty, Вы писали:

M>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать


Между плюсами и калькулятором у тебя нет промежуточных положений?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 13.09.20 20:06
Оценка:
Здравствуйте, Marty, Вы писали:

M>Да у нас уже технологии отлажены, никто менять ничего не будет. Только улучшать


Ты сам попросил примеры.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Написание своего DSL
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.09.20 20:45
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

M>>Ну, например, потому, что калькулятор я и в рукопашную за полдня напишу рекурсивным спуском,


НС>А генератором — за полчаса. И суть не в написать, а в научиться.


Научится — дело хорошее, но если задачу не решает, то можно и отложить.


M>> а плюсики хочу парсить для своего пет-проекта,


НС>Тебе уже сказали несколько человек, что плюсы это очень плохой вариант.


И что теперь? Завернутся в простыню и ползти на кладбище?
Маньяк Робокряк колесит по городу
Re[9]: Написание своего DSL
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.09.20 20:48
Оценка:
Здравствуйте, Marty, Вы писали:

N>>В ANTLR, конечно, какой-то пример, но минимальный; полный парсер, чтобы получить хотя бы AST, должен включать в себя из-за описанных свойств интерпретатор логики шаблонов (а вслед этим и значительного подмножества языка).

M>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать

Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут.

N>>Лучше вызывайте clang, он за вас всё сделает

M>Это скучно

Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают...
Да, лучше взять другую задачу, тут я полностью согласен.
The God is real, unless declared integer.
Re[10]: Написание своего DSL
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.09.20 20:53
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

M>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать


НС>Между плюсами и калькулятором у тебя нет промежуточных положений?


На текущий момент практически нужных — нет. Но обещаю тебе, когда появятся — обязательно сделаю ещё один подход к снаряду.
Маньяк Робокряк колесит по городу
Re[9]: Написание своего DSL
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.09.20 20:59
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

M>>Да у нас уже технологии отлажены, никто менять ничего не будет. Только улучшать


НС>Ты сам попросил примеры.


А можно контекст, где я что просил? А то я тут немного его видимо потерял. Вроде примеров стеков протоколов я не просил
Маньяк Робокряк колесит по городу
Re[10]: Написание своего DSL
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.09.20 21:15
Оценка:
Здравствуйте, netch80, Вы писали:

M>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать


N>Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут.


Ну только оно уже работает. Ну ты понил, да?


N>Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают...


Пару десятков человеко-лет? Я столько не проживу

Колоризер для 03их плюсиков я еще в первой половине нулевых написал, месяц, ну, может два, практически со студенческой скамьи. И да, он умел в typedef, struct/class и подсвечивал их отдельно другим цветом. Сейчас плюсики несколько усложнились, но и я уже не тот


N>Да, лучше взять другую задачу, тут я полностью согласен.


Так мне эта нужна. Вот я и подумал, может, мне инструменты помогут
Маньяк Робокряк колесит по городу
Re[11]: Написание своего DSL
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.09.20 04:32
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>Похоже, что ручной работы что так, что эдак — куча. Оставить что ли изучение ANTLR до тех времён, когда надо будет калькулятор написать

N>>Ну почему сразу калькулятор. Твои хитрые файлы вполне тут подойдут.
M>Ну только оно уже работает. Ну ты понил, да?

Зато проба реализации на другом средстве обычно помогает находить баги и проблемы дизайна.

N>>Ну блин реально терять пару десятков человеко-лет на повторение того, что крупные корпорации и так делают...

M>Пару десятков человеко-лет? Я столько не проживу
M>Колоризер для 03их плюсиков я еще в первой половине нулевых написал, месяц, ну, может два, практически со студенческой скамьи. И да, он умел в typedef, struct/class и подсвечивал их отдельно другим цветом. Сейчас плюсики несколько усложнились, но и я уже не тот

Ну если сделать на уровне _до_ того, как начнут действовать все описанные проблемы — то можно и на ANTLR и вообще на чём угодно.

Только хватит ли тебе этого. И я по нынешнему состоянию и не уверен, что это вообще возможно.

N>>Да, лучше взять другую задачу, тут я полностью согласен.

M>Так мне эта нужна. Вот я и подумал, может, мне инструменты помогут

The God is real, unless declared integer.
Re[11]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 14.09.20 06:54
Оценка:
Здравствуйте, Marty, Вы писали:

НС>>А генератором — за полчаса. И суть не в написать, а в научиться.

M>Научится — дело хорошее, но если задачу не решает, то можно и отложить.

И потом опять сделать ту же ошибку?

M>>> а плюсики хочу парсить для своего пет-проекта,

НС>>Тебе уже сказали несколько человек, что плюсы это очень плохой вариант.
M>И что теперь? Завернутся в простыню и ползти на кладбище?

Начинать с более простых задач. Не нравятся тулы — попробуй руками реализовать хотя бы парсер Пратта. Работы на пару часов, зато потом свой DSL полноценными выражениями сможешь расширить.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 14.09.20 06:54
Оценка:
Здравствуйте, Marty, Вы писали:

M>На текущий момент практически нужных — нет. Но обещаю тебе, когда появятся — обязательно сделаю ещё один подход к снаряду.


Тут есть опасность того, что ты сейчас считаешь написание нормальных парсеров чем то очень сложным и не видишь очевидных мест применения.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 14.09.20 07:08
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну только оно уже работает. Ну ты понил, да?


Во-первых там могут быть ошибки, во-вторых когда ты опишешь грамматику у тебя будет более ясное понимание где у тебя узкие места и в какую сторону можно двигаться.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 14.09.20 07:10
Оценка:
Здравствуйте, Marty, Вы писали:

НС>>Ты сам попросил примеры.

M>А можно контекст, где я что просил? А то я тут немного его видимо потерял. Вроде примеров стеков протоколов я не просил

M>1) Примеры удачных DSL? Где взять?

... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Написание своего DSL
От: scf  
Дата: 14.09.20 08:50
Оценка: :)
Здравствуйте, Marty, Вы писали:

M>Запилил статейку на эту тему со своими практиками, предлагаю обсудить. Но — с конструктивом, а не просто: "ты лошара неграмотная, я тебя на работу не возьму". Хочу понять, как таки это делать правильно и быстро.


Увидил топик, не смог пройти мимо. Итак, по моему опыту:

Самый простой и полезный DSL — это DSL кодом. Т.е. DSL представляет из себя вызовы некоторых, написанных заранее функций, реализация которых собирает в памяти структуру данных (тот же AST), которая дальше процессится какой-то логикой и генератором

Для текстового DSL я применяю самописные рекурсивные нисходящие парсеры https://en.wikipedia.org/wiki/Recursive_descent_parser
Очень рекомендую, эта техника написания парсеров проста в освоении и исключительно полезна.

Простые генераторы отлично пишутся кодом вперемешку со строками, для более сложных нужен любимый template engine, пачка шаблонов и обязательно отдельная модель для использования в этих шаблонах.
Re[5]: Написание своего DSL
От: alpha21264 СССР  
Дата: 14.09.20 15:59
Оценка:
Здравствуйте, Михaил, Вы писали:

М>Случайно зашёл в дискуссию и, будучи не в теме, стало любопытно. Можно в двух словах, в каких случаях оптимально создание нового дсл?


Когда ты хочешь решать задачу не на языке программирования, а на языке задачи.
Например, если ты пишешь шахматную программу, и хочешь изъясняться на языке ходов и позиций, а не циклов и подпрограмм.

Течёт вода Кубань-реки куда велят большевики.
Re[7]: Написание своего DSL
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.09.20 19:30
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>А "драконщина" — это что?


Классический трехтомник Ахо и Ульмана про компиляторы.

https://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886/ref=pd_lpo_14_t_1/134-1203048-9544724?_encoding=UTF8&amp;pd_rd_i=0201100886&amp;pd_rd_r=07253912-2e8f-436b-853d-95462d30438c&amp;pd_rd_w=NKkWd&amp;pd_rd_wg=r5hpf&amp;pf_rd_p=7b36d496-f366-4631-94d3-61b87b52511b&amp;pf_rd_r=8T5NEE0SEN01G14RV9N7&amp;psc=1&amp;refRID=8T5NEE0SEN01G14RV9N7

Название получил за ресунок на обложке.
Re[4]: Написание своего DSL
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.09.20 19:43
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Первый Фортран не далеко от такого ушел (до введения типизации):


В первом фортране оператор цикла мог выглядеть так:

DO I = 10, 100


А мог и так, потому что пробелы в нем не были значимы совсем:

DOI = 10, 100


А присваивание могло выглядеть так:

DOI = 10


Потому, что никто не запрещал назвать переменную DOI. Поэтому не дочитав до запятой, компилятор Фортрана даже и не знал, компилирует он присваивание или оператор цикла.

Насколько я понимаю, синтаксис Фортрана вообще нельзя описать контекстно-свободной грамматикой. А ты говоришь, хеш-таблицы...
Re[9]: Написание своего DSL
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.09.20 19:48
Оценка:
Здравствуйте, Marty, Вы писали:

N>>Лучше вызывайте clang, он за вас всё сделает


M>Это скучно


Напиши парсер ANSI C (без плюсов). Это и нескучно, и посильно.
Re[5]: Написание своего DSL
От: vdimas Россия  
Дата: 15.09.20 02:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А мог и так, потому что пробелы в нем не были значимы совсем:


Я на таком писал и?


Pzz>Поэтому не дочитав до запятой, компилятор Фортрана даже и не знал, компилирует он присваивание или оператор цикла.


А зачем знать?
На одной строке один оператор языка или ошибка трансляции.


Pzz>Насколько я понимаю, синтаксис Фортрана вообще нельзя описать контекстно-свободной грамматикой.



Синтаксис каждой отдельно взятой строки того Фортрана можно описать регулярной грамматикой (по Холмскому, а не перловой).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.