Проектирование с помощью Расширенных Форм Бэкуса Наура
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 15.04.24 13:00
Оценка:
В очередной раз задумался, стоит ли использовать при проектировании программ Расширенные Формы Бэкуса Наура (англ. Extended Backus Naur Form), сокращённо РБНФ (англ. EBNF). И дело не только в них, возможно что-то другое подобное, включая различные парсеры.

Локализация ISO/IEC 14977:1996(E) (Extended BNF)

Фактически, если вы можете описать синтаксис языка программирования, который представляет собой инструкции и является ограничением над простым текстом (plain text), то точно так же вы можете описать прочие ограничения, такие как идиомы, паттерны, архитектуры.

Ограничения простого текста.
1. инструкции.
2. идиомы.
3. паттерны.
4. архитектуры.
5. алгоритмы.

Причём в этот список так же входят алгоритмы. Где-то читал, что алгоритмы относятся к шаблонам поведения. Не к шаблонам проектирования поведения, а именно к шаблонам поведения.

Алгоритмы это точно такие же шаблоны как и другие конструкции с точки зрения ограничений. Их можно написать по-разному, но всегда есть предел при заходе за который данный алгоритм перестаёт считаться таковым и очевидно будет назван как-то по другому.

С точки зрения конструирования кода можно выделить операции.
1. Сбор.
2. Разбор.

Сбор используется для конструирования, а разбор для получения исходных конструкций или проверки на правильность набора.

По большому счёту, то о чём я говорю называется метаязыком.

Метаязы́к — язык, предназначенный для описания другого языка, называемого объектным языком.

Я думаю, что каждый программист так или иначе применяет метаязык при конструировании программ, только все ограничения находятся в голове у программиста. Они просто не заданы в явном виде, но они есть. Потом смотришь на их или свой код.

-Видишь суслика.
-Нет.
-И и я не вижу, а он есть.

Кстати, вот почему код не передаёт даже явные задумки, а не только отброшенные варианты. Не факт, что по коду можно создать метаязык использовавшийся для его создания. И как следствие проверить на правильность без самих программистов написавших код тоже нельзя.

1. Если брать ручное создание и проверку, то здесь всё понятно. Берём РБНФ или что ещё и погнали писать правила. Всё делаем ручками, проверяем глазками.
2. А если брать автоматику, то нужен какой-нибудь универсальный парсер. Их так-то не мало, но что-то я так за десятилетия ничего не попробовал на них наваять.

Первое попавшееся.
Нюансы разработки парсера для своего языка программирования

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

В принципе создать метаязык на основе существующих языков таких как C++ или C++ или может быть даже C++ вполне можно было бы. Хотя лично я воспринимаю это лишь как ограничения над конструкциями для получения явных ограничений вопреки неявным ограничениям, которые существуют лишь в мозгах программистов X.

Собственно пока всё это лишь на стадии размышления. Если есть какие-то мысли, практический опыт, видели где-то интересную статью или книгу на эту тему, то поделитесь ниже в комментариях.
Отредактировано 15.04.2024 13:05 velkin . Предыдущая версия . Еще …
Отредактировано 15.04.2024 13:05 velkin . Предыдущая версия .
Отредактировано 15.04.2024 13:04 velkin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.