Re[3]: Написание своего DSL
От: Ночной Смотрящий Россия  
Дата: 11.09.20 01:08
Оценка: +4
Здравствуйте, Marty, Вы писали:

M>Хочу не согласиться. Но, может, это просто моя "ошибка выжившего". Обычно хватает тупых инишек. Иногда — древовидных, где вложенность определяется отступами.


Хватать то хватает. Но ты продолжаешь делать ту же ошибку. Экономя человекодни на разработке инструмента теряешь человекогоды на его использовании. Активно используемый DSL (а делать его имеет смысл только при активном использовании) на много порядков умножает любое, даже копеечное удобство.

НС>>На прочтение и освоение чего то вроде драконов нужно потратить пару недель один раз в жизни, коли уж с профильным образованием не срослось. После этого пугаться лексеров и парсеров не будешь.

M>Дракон — драгон бук, что ли? Читал. Про образование — это типа задеть хотел?

Нет. Просто не могу иначе объяснить проблему с элементарными вещами. Написать простейший LL парсер проще и быстрее, чем рукопашный непонятный парсер лопатить, а потом годами вылавливать из него баги.

M>Но есть вопросы.

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

DSL на то и DSL, что они D. Про твой D я ничего тебе посоветовать не могу. Возможно VHDL будет неплохим примером.

M>2) Тесты — хм. На них нет времени.


Мне надо повторить тезис про технологический уровень?

M>3) Тесты — дампы AST как должно быть — руцами писать? У меня нет пары лет на вылизывание всего этого.


Откуда взялась пара лет? Я куда более сложные DSL, уровня SQL, за 3-4 месяца один писал. С тестами. А то что у тебя — я вообще пока не понял при чем тут DSL. Такой ерунды у меня в том числе в текущих проектах — тонны каждый спринт.

M>4) Вот пример
Автор: Marty
Дата: 10.09.20
исходника на моём языке. Он сейчас вполне всех устраивает. Если тебе не сложно, не мог бы ты коротенько написать, как бы ты сделал его разбор? Ну, и как можно улучшить сам язык


Зачем там знаки $ и #? Что в нем такого, чего нельзя описать на yaml или json примерно теми же усилиями? Зачем тут вообще DSL, если, за исключением разве импортов да typedef, это простейшая древовидная структура? Если основные потребители — те кто использует плюсы и шарп, то зачем было изобретать свой нестандартный синтаксис? ?#!rdlc в начале зачем? Чем отличается include от import?
Что касается улучшения — очень сложно тебе что то посоветовать не варясь в вашей предметной области и не понимая смысла написанного. Если совсем обще — я бы убрал весь визуальный мусор, все эти ненужные значки, ввел бы нормальный конец строки и отказался от бейсиковых слешей для переноса. Синтаксис взял бы стандартный сишный. Сделал бы язык попонятнее — какие то префиксы в импорте, которых ниже по тексту нет, какой то ro, какие то неймспейсы сами по себе не ясно к чему относящиеся. Куча underscores.
generator=cpp:struct как бы намекает, что вместе с целевой областью тут какая то мешанина инструкций для процессинга, зачем оно там? В той секции что капсами — куча повторяющихся слов.
<< это что? Распиновка? >> может там быть? Если нет, то ты зря направленную, да еще и двойную лексему использовал. Достаточно симметричного значка типа -. Почему там слева везде только 1? Там может быть что то другое? Часто?
$typedef u8 : bool. По смыслу — новый тип u8, идентичный bool. А судя по тому что ниже — наоборот. Я понимаю что моск С++ испорчен, но там хоть : нет и можно какую то извращенную логику натянуть. Но лучше не заставлять человека гадать. type bool = u8 любого, с любым бекграундом, в заблуждение не введет, в отличие от.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.