Форум программистов, компьютерный форум, киберфорум
CoderHuligan
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Продолжение формализации. Некоторые идеи #2

Запись от CoderHuligan размещена 03.04.2020 в 14:32
Показов 18202 Комментарии 221

(Добавлено позднее: это конечно заблуждение, но оно интересно с точки зрения фантазии...)
Кстати, о птичках (не так сложно написать компилятор, как формализовать ЯП без сайд эффектов)
Если не отказываться от стека (пусть даже виртуального), а все же оставить некую общую структуру для передачи данных, то можно сделать вот что.
Можно обратную польскую запись, как бы это мягче выразиться.. - даже не "выровнять", а обратить любое выражение в последовательность элементарных инструкций, как это было описано в предыдущем посте данного блога, но гораздо проще.
Что предлагается?
А вот что:
Итак:
1) у нас есть, допустим стек;
2) но мы не хотим использовать сложные вложенные выражения со скобками, которые трудно разбирать;
3) использовать старшинство операций по умолчанию(источник ошибок);
4) нас тошнит от синтаксиса Forth;
5) мы хотим все сделать "по компьютерному" а не по....
Чтобы не ходить далеко, начнем сразу с примера:
Допустим у нас есть классическое инфиксное выражение (для домохозяек):
Visual Basic
1
3 + 4 × (2 − 1)
Давайте запишем его на нашем гипотетическом командном basic.
Теперь у нас имеются кроме бинарных и "унарные" операции. Использую термин "унарные" только в данном контексте и прошу не путать их с унарными в обычном.
Запишем вышеприведенное выражение таким образом (сразу предупреждаю, что это НЕ префиксная и НЕ постфиксная запись!!!):
Visual Basic
1
- 2 1 * 4 + 3
Что здесь происходит? Сначала, по старшинству операций мы вычитаем используя бинарную (в которой участвуют два операнда) операцию "-". Эта операция (команда) складывает 2 и 1, а результат кладет на стек. Далее нам нужно умножить результат на стеке на 4. Для этого используется унарная (из-за внешности) операция *, которая снимает со стека результат прежней операции и умножает его на число 4 (один непосредственный аргумент), а результат кладет на стек. Унарный + делает то же самое, только складывает число на вершине стека со своим единственным аргументом.
Теперь, что же мы получили в итоге? Мы, внимание, - выровняли выражение, и привели его к естественным последовательностям инструкций!
Это значит, что теперь это выражение стало совершенно естественным, так как его нужно читать слева направо до самого конца, чтобы его понять, как читаем мы обычные тексты. Нам не нужно прыгать по выражению в поисках первой операции по старшинству. Также мы избавились от лишних промежуточных переменных (как это было в прошлом посте), коих просто нет.
Обозначение и лексическое отделение бинарных операций от унарных требует своей проработки. например, унарную операцию "+" можно представить бинарной при помощи ключевого слова "ADD": ADD 3 в.
Или использовать односимвольное обозначение.
Более того, такую запись возможно сжимать убирая пробелы между операциями:
Visual Basic
1
- 2 1*4+3
К тому же это позволяет избавится (избавляемся от всего ненужного...)и от отделения команд-операций друг от друга путем прибавления к их хвосту символа ";", так как лексер и так всё хорошо разберет. Но это уже для "эстетов".
Более полная проработка данной идеи будет, надеюсь, позднее.
Мы привели Forth к нормальному человеческому виду при этом оставив его простоту..
А теперь пойдем дальше и... приготовьтесь.. избавимся и от "бинарных" операций!
Преобразуем наше выражение 3 + 4 × (2 − 1) в:
Visual Basic
1
2 - 1 * 4 + 3
Тут нет "бинарных" операций. Число "2" имеет такой смысл: его просто кладут на стек (перед ним нет арифметического оператора). Дальше все как обычно. Ну и сжимаем до неприличия:
Visual Basic
1
2-1*4+3
По прежнему эти выровненные выражения можно использовать например в :
Visual Basic
1
IF a > b 30
Заметьте: теперь пропала запятая, которая отделяла метку перехода (последняя) от операции. Еще одно упрощение.. А если применить обычную структурную условную конструкцию:
Visual Basic
1
2
3
4
IF a > b 
  "code"
else
  "code"
то можно избавится от then. Хотя, если вместо "выражения"(которое не является настоящим выражением) будет просто переменная, то невозможно будет отделить следующий код.. Поэтому тут возможно нужен then в качестве открывающей скобки.
(В выражении a > b, "a" кладется на стек, а оператор > снимает значение переменной со стека сравнивает это значение с "b")
Логическое выражение:
Visual Basic
1
a < c && g > d
Транслируется например в:
Visual Basic
1
a < c g > d &&
Смысл && в том, что он снимает два верхних значения и применяет к ним логическую операцию "и".

Заметьте: длина нашего выражения не длиннее обычного, куда-то испарились все приоритеты, а читать стало намного приятнее!
Еще это позволяет почти один в один транслировать выражение в байт код виртуальной машины, надеюсь преимущества тут совершенно очевидны: высокая скорость трансляции. Предлагаю назвать такой способ записи выражений "прямым", хотя предлагайте свои варианты наименования.
Прошу не судить строго. Я пока нахожусь в поиске.
Спасибо за внимание.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 221
Комментарии
  1. Старый комментарий
    Аватар для Quiet Snow
    Уважаемые пользователи!
    Просьба не переходить на личности в обсуждении.
    Где были личности? НИКОГДА не обсуждаю: цвет кожи, вероисповедание, вкус еды и прочие пристрастия.
    Только профильные навыки и только в практическом ключе.
    На профильном форуме с названием "Форум программистов и сисадминов Киберфорум"
    очевидно обсуждаются соотв. технические вопросы. И словесный формат общения подразумевает
    аргументы, построенные на фактах. Аргументы не построенные ни на чём он не подразумевает
    и это отражено в правилах в пункте 5.22, за которым следят люди, которым доверили это дело.

    И что мы видим. Когда пытаюсь прояснить ситуацию, в целях понять профессиональную
    принадлежность(ведь речь зашла о практических навыках) людей к обсуждаемым вопросам. Это
    вдруг начинает считаться личным оскорблением. Т.е. писать программы, знать свою профессию - это
    личное оскорбление?
    Правильно понимаю, что теперь, с данного момента можно НИЧЕГО НИКОМУ не показывать и
    выдвигать любые, ничем не подкреплённые тезисы и аргументы в формате "то, что тут сказано - ложь"?
    И на основании этого можно "обнулять" любые аргументы и тезисы любой персоны на этом форуме?
    При этом к персоне это не будет иметь никакого отношения? Т.е. я всё правильно понял?

    Проясните обстановку на международной площадке, уважаемые администраторы, модераторы и все
    кому доверили этим заниматься.
    Запись от Quiet Snow размещена 19.04.2020 в 15:26 Quiet Snow вне форума
 
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru