Mathos

Mathos

О разборе и создании языков программирования. Я в ВК: https://vk.com/kot_miyao В Telegram: https://t.me/kot_miyao Иногда бывает и всякая всячина.
На Пикабу
10К рейтинг 34 подписчика 28 подписок 106 постов 17 в горячем
Награды:
Пикабу 17 лет! Сборщик Пыли
6

Обратная польская нотация, получение и вычисление

Серия Что такое язык программирования?

Предыдущая статья: Включения действий при разборе и итог пройденных тем в vk.com

Статья для повторения: От перепутья к перепутью, часть вторая: Разбор языка арифметики

Для тех кто спешит увидеть код вот (С#) или псевдокод вот, кому нужна ясность в них читаем далее.

В привычной нами записи выражения, знак операции (далее оператор) записываются между значениями (далее операндами):
а + б
Такая форма называется инфиксной (калька - вкрепной).
Так же используется префиксная (докрепная) запись, когда операторы пишутся до операндов:
+ а б
и постфиксная (закрепная) запись, когда операторы пишутся за операндами:
а б +

Ниже показаны ещё примеры:

Префиксная и постфиксная запись также именуются прямая и обратная польская нотация (далее ОПН), в честь её изобретателя польского логика Яна Лукасевича. Отличительная их черта, то что в них не используются скобки для обособления вычисления.

Получение ОПН из инфиксной записи

Используем рекурсивный спуск по рассмотренной нами грамматике, где в качестве чисел целые без знака:

Грамматика с унарным минусом и плюсом:
Г: В -> ДС
С -> ε | +ДС | -ДС
Д -> РП | -Д | +Д
П -> ε | *РП | /РП
Р -> ч | (В)

Звенья цепочки ОПН опишем набором трёх типов:
1. Операнд - целые числа.
2. Одноместный оператор - однооп, это унарный минус и плюс.
3. Двуместный оператор - двуоп, это минус, плюс, умножить, делить.

Ниже представлено полное описание звена ОПН:

Соберём звенья в список, который будет представлять нашу ОПН. Для этого отметим 3 действия на отделах рисунка порядка:
Д1 - Создать хрон. Переменная хранящая звено до момента добавления в список.
Д2 - Запомнить. Помещаем встреченное звено в хрон.
Д3 - Добавить. Записываем в список ОПН.

Ниже показаны отделы и процедуры со встроенными действиями в разбор:

Так мы добавляем в первую очередь операнды, затем операторы в порядке их приоритетов. Всмотритесь в процедуру «Дополнениее». В качестве хрона используется стог (англ. stack), так как запоминаются несколько знаков сразу, их следует вспомнить в обратном порядке.

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

Грамматика обратной польской нотации:
Г:В -> ч | П`П
П`-> чПО
П -> ВОП | ε

где:

В - ВЫРАЖЕНИЕ
О - ОПЕРАТОР
П - ПРАВОЕ_ПОДВЫРАЖЕНИЕ
П`- ПОДВЫРАЖЕНИЕ
ч - ЧИСЛО

Остановитесь на минутку, осмыслите.

Вычисление ОПН

Ниже изображена схема устройства вычисления ОПН - Стог-машина (Stack machine), а на следующем её описание. Для примера использована ОПН:

1 2 3 * + 4 -

Которая получена из инфиксной записи:

1 + 2 * 3 - 4

Стог-машина состоит из:

  1. Стога - в котором хранятся промежуточные значения.

  2. Набора двухместных и одноместных операций.

  3. Движка - который читает ОПН, управляет стогом и обращается к набору операций.

ОПН обладает свойством: действия применяются последовательно при её чтении, на чём и основана работа стог-машины:

  1. Если звено операнд, то кладём число в стог.

  2. Если звено однооп, снимаем верхнее число обрабатываем, итог кладём в стог.

  3. Если звено двуоп, снимаем два верхних числа и применяем операцию. Причём первое значение операции - второе верхнее, а второе - первое верхнее. Итог кладём в стог.

  4. По окончанию чтения ОПН, итог вычисления оказывается на дне стога, одним.

В заключении

Не стоит думать, что рассмотренный способ единственный для получения ОПН. Есть так же алгоритм Дейкстры перевода выражения в ОПН, но я не знаю стоит ли его разобрать или сразу перейти к обсуждению включения действий в «Провидца», ранее нами рассматриваемого.

Поэтому решение будет зависить от вас:

Какую тему разобрать следующей?
Всего голосов:

Ну на это всё, быть добру, хорошего настроения. Подписывайся. =)
Точно! Для любознательных и внимательных читателей, ещё одна не позиционная система счисления.

Показать полностью 8 1
0

Интересная этимология слова: «Экономика»

Серия Минутка этимологии

Слово заимствовано у греков: oikonomia.
Слово состоит из двух корней:

  • Oikos (οἶκος) — дом, жилище, хозяйство.

  • Nomos (νόμος) — закон, правило, порядок.

    В каком-то смысле дословно — домострой.
    У меня всё.

После описанного: Почему глобальную экономику не назвали космономика? Вопрос риторический.

Улучшение ввода с клавиатуры русского письма

UPD:

Учтя критику, пришёл к такому переосмыслению, вот скрипт:

Изображение в прикреплённом комментарии.

Что же, дам имя раскладки: "Раскладка Ая"

Задача:

Как с помощью 26 клавиш вводить русское письмо, остальные же оставить под особые начерки? Такие как: [ ] < > ^ { } и т.д.

Предыстория или мой розмысел о русской орфографии.

Скажу заранее: я не предлагаю сменить орфографию, а лишь проследить то, как мои помыслы повлияли на управление ввода. К тому же, улучшенный ввод предлагается к текущей кодифицированной орфографии.

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

Пришёл к такой преображённой азбуке:

(^_^)

(^_^)

Всё, что я сделал, это устранил омофонию (однозвучие). Все согласные считаем твёрдыми, если нужно смягчить, то ставь ьотированный, даём вольность йотированным. Споры и прочия разбирательства оставим лингвистам, а мы возьмём лишь один принцип для построения раскладки: й, ь, ъ — омофоничны и посему будут размещаться на одной клавише.

Для лингвистов:

На самом деле существует одна известная мне пара слов, где если мы заместим ъ на ь, то смысл поменяется, вот она: подобъём, подобьём.

Если вы почему-то захотели попользоваться шрифтом, то вот, если вам захотелось прочесть больше текста, могу лишь предложить рассказ 2187-оь, в прошлой версии набора начерков азбуки. Меня засмущало то, как будет выглядеть слово для, если его не менять :-)

О воплощении задуманного:

Взглянем на опыт людей, которые используют иероглифическое письмо. Для ввода текста они используют редактор метода ввода (IME Input Method Editor), их ввод опирается на контекст. Так называемые контекстно-зависимые иероглифы. В нашей письменности есть контекстно-зависимая буква, это й. И да, наш новый ввод тоже строится в парадигме редактора метода ввода. Имеем: при нажатии клавиши йьъ, й вводится:

1) После глассных.
2) В начале слова.

Именно так размещается й на письме русского слова.

Разместим парно буквы по признаку твёрдости-мягкости/отверждения-смягчения:
ая, иы, еэ, оё, ую, шщ, также мы имеем, клавишу йъь, где ь и ъ соответствуют, тому же принципу. После размещения, мы обнаружим, что использовали 25 клавиш и одна клавиша у нас "мёртвая". Я дал ей имя Ая, и она выглядит как вертикальная лигатура, вот так:

Ъуъ удивлённо смотрит на Ая.

Ъуъ удивлённо смотрит на Ая.

Ая используется для ввода букв обратных по признаку. Ввод осуществляется последовательно, сперва Ая затем обратная. Задумка в том, чтобы "играть" мелодику, а не гармонику беря аккорды. Она похожа на клавишу Compose, только лишь размещается в более удобном месте.


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

Правка ЙЦУКЕН и проецирование на QWERTY.

ЙЦУКЕН замечательная раскладка, в ней учтена частотность встречаемости букв в тексте русского языка. Поэтому мы будем стараться избегать не нужных изменений. Но как говорят, проще один раз увидеть, чем сто раз услышать, так-что вот:

(0_0)

(0_0)

Ниже предоставлена памятка о вводе:

На этом пожалуй всё.

Полноценную реализацию IME, я конечно не делал, но вы можете попробовать способ запустив скрипт для AutoHotkey 1-ой версии. У меня пока-что не так много свободного времени, чтобы разбираться в деталях реализации, возможно вы захотите этим заняться? Право дать имя данному способу отдаю публике Пикабу.

Примечание к запуску скрипта:
Перед запуском следует перейти на английскую раскладку. Также я добавил последовательность Ая л, для перехода на стандартный QWERTY, для возврата на кириллицу следует нажать двойным нажатием `.

Костыль или фича? А может добавить Ая г для перехода на греческий?

Подытожим.

Мы сжали ввод, не сильно отклоняясь от ЙЦУКЕН-а. Клавиша Ая находится в удобном месте, чтобы не приходилось тянуться для ввода обратных букв. Мы высвободили место, для удобного ввода особых начерков.

Но чем плоха эта раскладка? Тем, что она наследует проблему QWERTY. Мы более нагружаем левую руку и вполне естественнее было бы спроецировать на Dvorak.

Надеюсь вы приятно провели время за прочтением поста. Пока!

Показать полностью 4
1

Ответ на пост «Чем всех так покорил одинокий пингвин?»5

Нужны православные субтитры? Вот версия:

Джун, Мидл, Сеньор - кто вы?

На днях читал вот эту замечательную книжку в русском переводе:

Джун, Мидл, Сеньор - кто вы?

Книга повествует о культуре разработки и о том с какими личными трудностями сталкивается человек профессии. Возможно автор этой книги и зачинатель этих определений степеней. Если вы до сих пор не понимаете, что значит джун, мидл и сеньор, то в главе 14 вы найдёт хорошее объяснение от переводчика. Я конечно могу написать предложенный вариант, но советую дойти до этой главы самостоятельно не пролистав по диагонали.

Показать полностью 1
5

Ответ на пост «Мужиков»5

Учился я в одной школе с пареньком по фамилии Конопля. Спустя годы узнал, что он подался в попы. С тех пор меня не отпускает мысль, а как он реагирует на вопрос:
- Батюшка, а когда приход будет?

UPD: История не выдуманная, но вряд ли вы поверите. Очень уж анекдотичная.

Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества