Mathos

Mathos

О разборе и создании языков программирования. Я в ВК: https://vk.com/kot_miyao В Telegram: https://t.me/kot_miyao Иногда бывает и всякая всячина.
На Пикабу
9383 рейтинг 33 подписчика 24 подписки 99 постов 15 в горячем
Награды:
Сборщик Пыли
6

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

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

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

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

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

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

Обратная польская нотация, получение и вычисление Опрос, Программирование, Разбор, Парсер, Переводчик, IT, Урок, Длиннопост

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

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

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

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

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

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

Обратная польская нотация, получение и вычисление Опрос, Программирование, Разбор, Парсер, Переводчик, IT, Урок, Длиннопост

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

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

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

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

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

где:

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

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

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

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

1 2 3 * + 4 -

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

1 + 2 * 3 - 4

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

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

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

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

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

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

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

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

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

В заключении

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

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

Какую тему разобрать следующей?
Всего голосов:
Обратная польская нотация, получение и вычисление Опрос, Программирование, Разбор, Парсер, Переводчик, IT, Урок, Длиннопост

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

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

Из произведения «О русском уме»

Из произведения «О русском уме» Иван Петрович Павлов, Цитаты, Мудрость

Іваη Петровiч Павᴧов

Сᴧеδуυшяя черта ума ― это абсоᴧυтηая свобоδа мѵсᴧi, свобоδа, о котороь в обѵδеηηоь жѵsηi ηеᴧьsя составiть себе δажэ i отδаᴧєηηоƨо nреδставᴧеηiя. Вѵ δоᴧжηѵ бѵть всеƨδа ƨотовѵ к тому, чтобѵ откаsаться от всеƨо тоƨо, во что вѵ δо сiх nор креnко верiᴧi, чем увᴧекаᴧiсь, в чем nоᴧаƨаᴧi ƨорδость вашэь мѵсᴧi, i δажэ ηе стесηяться темi iстiηамi, которѵе, каsаᴧось бѵ, ужэ ηавсеƨδа устаηовᴧеηѵ ηаукоь. Δеьствiтеᴧьηость веᴧiка, бесnреδеᴧьηа, бескоηечηа i раsηообраsηа, оηа ηiкоƨδа ηе укᴧаδѵвается в рамкi ηашѵх nрisηаηηѵх nоηятiь, ηашѵх самѵх nосᴧеδηiх sηаηiь... Беs абсоᴧυтηоь свобоδѵ мѵсᴧi ηеᴧьsя увiδеть ηiчеƨо iстiηηо ηовоƨо, что ηе явᴧяᴧось бѵ nрямѵм вѵвоδом is тоƨо, что вам ужэ isвестηо.

Іваη Петровiч Павᴧов.

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

Почему напряжение обозначают буквой – U, сопротивление – R, а ток – I ?

Буква U происходит от немецкого слова "Unterschied" (разность). В немецкоязычной научной литературе, которая сильно повлияла на раннюю электротехнику, напряжение обозначалось как U. Это обозначение закрепилось в международной практике, хотя в некоторых странах (например, в англоязычных) иногда используют V (от voltage).

Буква I происходит от французского слова "Intensité" (интенсивность, сила тока). Этот термин ввёл Андре-Мари Ампер, один из основоположников электродинамики. В его работах сила тока обозначалась как I, и это сохранилось в большинстве стран.

Буква R происходит от латинского "Resistentia" (сопротивление). Это обозначение было предложено Георгом Омом, который сформулировал закон Ома (U = I × R).

4

2187-оь

Аᴧфавiт:
A a, Б б, В в, Г ƨ, Δ δ, Е е, Ԑ є, Ж ж, S s, І i, К к, Λ ᴧ, М м, N η, O o, П n, Р р, C c, Т т, У у, Ф ф, Х х, Ҁ ς , Ч ч, Ш ш, Ь ь, Ѵ ѵ, Э э, U u, Я я

2187-оь Фантастический рассказ, Постапокалипсис, Сказка, Длиннопост

Nовѵь Архаηƨеᴧьск

2187-оь ƨоδ.

Пᴧаηета isмеηiᴧась. Посᴧе Веᴧiкоƨо nереᴧома — экоᴧоƨiческоь катастрофѵ, nревратiвшэь боᴧьшуu чясть сушѵ в беsжѵsηеηηѵе nустошѵ, — чеᴧовечество uтiᴧось в ηескоᴧькiх ƨiƨаηтскiх куnоᴧах-ƨороδах. Посᴧеδηiь is ηiх, "Nовѵь Архаηƨеᴧьск", вiсеᴧ ηа скаᴧах ηаδ бурηѵм океаηом, сᴧовηо ᴧасточкiηо ƨηеsδо.

Тiхоη, моᴧоδоь iηжэηер-экоᴧоƨ, работаᴧ в Отδеᴧе Восстаηовᴧеηiя — ƨруnnе учєηѵх, nѵтавшѵхся верηуть Sемᴧе жѵsηь. Nо iх усiᴧiя бѵᴧi каnᴧеь в море: семеηа ƨiбᴧi в кiсᴧотηѵх δожδях, роботѵ-δроηѵ ᴧомаᴧiсь в яδовiтѵх тумаηах, а ᴧuδi nостеnеηηо теряᴧi ηаδежδу.

Всє isмеηiᴧось, коƨδа Тiхоη обηаружѵᴧ аηомаᴧiu в старѵх δаηηѵх. В sаnретηоь sоηе, sа nреδеᴧамi куnоᴧа, ƨδе раδiаςѵя δоᴧжηа бѵᴧа убiвать всє жѵвое, что-то sеᴧеηеᴧо.

Тiхоη таьком nокiηуᴧ ƨороδ ηа старом веsδехоδе. Оη nробiраᴧся сквоsь "Мєртвѵь nояс" — sоηу sа nреδеᴧамi куnоᴧа, ƨδе nо офiςѵаᴧьηѵм δаηηѵм, ηе вѵжѵваᴧ δажэ воsδух. Еƨо веsδехоδ сᴧомаᴧся в трєх кiᴧометрах от аηомаᴧii, i теnерь оη шоᴧ nешком, втiскiваясь в nротiвоƨаs nрi кажδом nорѵве яδовiтоƨо ветра.

Оη nочтi ηе верiᴧ δаηηѵм. Можэт, это ƨᴧuк сеηсоров? Іᴧi nровокаςѵя nравiтеᴧьства, чтобѵ вѵявiть "ηеᴧояᴧьηѵх"? Nо есᴧi там δеьствiтеᴧьηо есть sеᴧеηь…

Вηеsаnηо sемᴧя nоδ ηоƨамi стаᴧа мяƨче. Оη ηакᴧоηiᴧся — это бѵᴧ мох. Nастояшiь, вᴧажηѵь, nахηушiь sемᴧєь, а ηе хiмiкатамi.

— "Стоять!"

Тiхоη осторожηо nоδηяᴧ рукi, чuвствуя хоᴧоδηое δуᴧо δротiкомєта у своеь сniηѵ.

— "Я ηе вооружоη," — nроƨоворiᴧ оη, меδᴧеηηо nоворачiваясь.

Переδ ηiм стояᴧа δевушка в nᴧаше с каnuшоηом, отбрасѵваuшiм теηь ηа ᴧiςо. Nо δажэ в nоᴧумраке оη раsƨᴧяδеᴧ еє яркiе, nочтi светяшiеся ƨᴧаsа — такоƨо оттеηка sеᴧєηоƨо ηе бѵᴧо в еƨо ƨороδе δажэ у iскусствеηηѵх растеηiь.

— "Тѵ вообше nоηiмаешь, куδа sаᴧеs?" — еє ƨоᴧос sвучяᴧ реsко, ηо беs ηастояшеь sᴧобѵ. Скорее, с устаᴧѵм раsδражэηiем.

— "Я iскаᴧ sеᴧєηуu sоηу. Сеηсорѵ nокаsѵваᴧi..."

— "Сеηсорѵ врут," — оηа nеребiᴧа еƨо, оnуская оружѵе. "Как i всє, что ƨоворiт вашэ nравiтеᴧьство."

Тiхоη моᴧчя кiвηуᴧ, ηе решаясь сnросiть, кто оηа. Nо δевушка, сᴧовηо уᴧовiв еƨо мѵсᴧь, вδруƨ усмехηуᴧась:

— "Тѵ хочешь сnросiть, как меηя sовут?"

Оη nокрасηеᴧ — в еƨо мiре ᴧiчηѵе iмеηа sηачiᴧi куδа боᴧьшэ, чем беsᴧiкiе iδеηтiфiкаторѵ.

— "Δа. Есᴧi... есᴧi это можηо."

Δевушка откiηуᴧа каnuшоη, i вnервѵе оη увiδеᴧ еє nоᴧηостьu: короткiе, вѵƨоревшѵе ηа соᴧηςэ воᴧосѵ, тоηкiе бровi, сiяuшuu беᴧєсуu кожу.

— "Евδокiя," — скаsаᴧа оηа, вѵδержѵвая nауsу, сᴧовηо nроверяя, уsηает ᴧi оη это iмя.

Тiхоη меδᴧеηηо nовторiᴧ:

— "Евδокiя..." — оηо sвучяᴧо страηηо, сᴧовηо эхо is nрошᴧоƨо, is тех старѵх кηiƨ, что оη таьком чiтаᴧ в ƨороδской бiбᴧiотеке.

— "А тебя?" — оηа скᴧоηiᴧа ƨоᴧову ηабок.

— "Тiхоη."

— "Тiхоη..." — теnерь ужэ оηа nробоваᴧа еƨо iмя, i в еє ƨоᴧосе вδруƨ nроsвучяᴧа ᴧєƨкая ηасмешка. "Nу что ж, Тiхоη, раs уж тѵ ηашоᴧ ηас — nокажу, раδi чеƨо тѵ рiсковаᴧ."

...

UPD:

* ƨороδскоь

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

Когда-то я думал, что...

Когда-то я думал, что на Пикабу не безопасный контэнт для детей. Но сегодня я зашёл на "Ответы mail.ru". Ну знаете, там иногда было интересно помочь кому-то решить домашку по математике и дать развёрнутый ответ. Ведь мы лучше всего учимся, когда кому-то что-то объясняем. Прошу не осуждать мой фетиш. Сегодня я зашёл на этот сайт, а там обновление дизайна, убийство старой концепции, трэш, угар и содомия.

Короче это не описать словами, что там теперь творится. Пикабу если скажут, что вы токсичные и злые, знайте: пиздят. На фоне того ужаса, который там поведал, вы самые святые люди на свете. Даже контэнт 18+, на Пикабу, безопасный для детей.

Я всё... Я просто выговорится.

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