OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 16:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Сложные логические выражения
СообщениеДобавлено: Понедельник, 24 Апрель, 2023 13:06 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну кстати я согласен, что я плохо прочитал абзац перед табличкой и вообще то, что я привёл - не табличка приоритетов. Хорошо, делаем работу над ошибками. Начнём с расширенной цитаты:

Цитата:
В выражениях синтаксически различаются четыре класса операций с разными приоритетами (порядком выполнения). Операция ~ имеет самый высокий приоритет, далее следуют операции типа умножения, операции типа сложения и отношения. Операции одного приоритета выполняются слева направо. Например, x-y-z означает (x- y) -z.

Выражение = ПростоеВыражение [Отношение ПростоеВыражение].
ПростоеВыражение = ["+" | "-"] Слагаемое {ОперацияСложения Слагаемое}.
Слагаемое = Множитель {ОперацияУмножения Множитель}.
Множитель = Обозначение [ФактическиеПараметры] | число | символ | строка | NIL | Множество | "(" Выражение ")" | "~" Множитель.
Множество = "{" [Элемент {"," Элемент}] "}".
Элемент = Выражение [".." Выражение].
ФактическиеПараметры = "(" [СписокВыражений] ")".
Отношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
ОперацияСложения = "+" | "-" | OR.
ОперацияУмножения = "*" | "/" | DIV | MOD | "&".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложные логические выражения
СообщениеДобавлено: Понедельник, 24 Апрель, 2023 13:30 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Табличку я принял за табличку приоритетов, но это не она. Теперь возьмём для простоты таблицу приоритетов для Си из русской википедии (если в ней ошибка, то ругайте не меня, а википедию) и увидим, как различается понятие "операции" в Обероне и в Си, и сколько в Обероне приоритетов операций, если их назвать в Си. Я сразу скажу, что рекламный характер заявления про простоту Оберона не отменяется, и действительно тут есть подмена понятий, только не у меня. В Си, точка, круглые и квадратные скобки считаются операциями, а в Обероне их не стали так называть. Тем не менее, в синтаксис они входят. Подмена понятий - стандартный рекламный ход и, конечно же, обман. То, что я не разобрался, это, конечно, плохо, но я и не думал, что Вы так в это вцепитесь.

То, что концы с концами в рекламе не сходятся, видно хотя бы по тому, что в определении О2 пункт называется "операции", далее называются 4 группы операций и сразу за этим идёт табличка, в которой перечислены разные элемента синтаксиса, в том числе и те, которые операциями не названы. Тогда вопрос к автору документа: где здесь логика? Почему под заголовком "операции" размещена табличка, в которой "не операции". Я не вникал в такие глубины рекламы а принял всё за чистую монету, что меня и обмануло. Спасибо, Константин, что помогли проникнуть в эти глубины, хотя неясно, зачем мне было нужно тратить на это время. Далее, эта табличка и не содержит полного синтаксиса выражения. Т.е. вообще сложно определить смысл этой таблички и почему она находится именно в этом месте. Возможно, у Вас это получится лучше, чем у меня, а на мой взгляд выглядит, что документ просто не особо проработан с точки зрения терминологии, логики и структуры. Если бы я эту работу принимал, я бы его отправил на доработку, а Вы?

Итак, сравниваем понятие операций в Си (С++ сложнее, не буду тратить время), где 15 строчек и в Обероне и видим, что в Си операциями считаются:
Код:
. - точка - в Обероне не операция и не в табличке
- операция "запятая" - в Обероне не операция, частично не в табличке (в табличке только для множеств), а входит в понятие СписокВыражений
- обращение по индексу - в Обероне входит в понятие "Обозначение"
- постфиксные круглые скобки - в Обероне входит в понятие "Обозначение"
- разыменование указателя - в Обероне входит в понятие "Обозначение"


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

Во всяком случае, если кто-то говорит, что "оберон лучше Си, потому что в нём меньше приоритетов операций", должен не умалчивать о том, что понятие операции в нём определено по-другому (вот тут, я надеюсь, правда о том, что называется операцией в Си: https://en.wikipedia.org/wiki/Operators ... nd_C%2B%2B ). Если составить сравнение честно, то оно будет звучать примерно так:
"В Обероне по-другому определили понятие операций и упростили синтаксис. За счёт этих двух факторов количество приоритетов снизилось с 15 до 4". А уж каждый читатель сам будет оценивать, насколько хорошо было сделано, что произвели замену понятий (не путать с подменой - подмена была в телеге). По идее, для меня всегда плохо пахнет, когда берут старое понятие и придают ему другой смысл. Равно так же плохо пахнет, когда берут явление, для которого уже есть понятие, и придумывают для него новое понятие. Это - два рекламных инструмента, которые очень любят в США. Но тут надо лезть в определение языка Алгол и тогда станет ясно, кто был первый с понятием операции и кто менял смысл. Но это выходит за рамки моих интересов. Я же изначально не хотел лезть в эту терминологию, потому что она мутная и говорил о сложности самих правил, а не о том, как называть элементы. Потому что от названия элементов суть синтаксиса не меняется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложные логические выражения
СообщениеДобавлено: Четверг, 27 Апрель, 2023 15:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Попробуем теперь составить табличку для Оберона, исходя из того определения операции, которое принято в Си. По табличке из англоязычной Википедии получаем:

Код:
2 правые скобки (), элемент массива [], поле . ,
3 ~, унарный -, а также разыменование укля ^ - не уверен, может оно не сюда
5 * / MOD DIV и т.п.
6 +, -
9,10 сравнения =,#,< и т.п.
N/A .. - диапазон. Хоть он и в особом месте в Обероне, но он же есть. А вот конструктор множества сложно назвать операцией, т.к. он чётко ограничен слева и справа и является уже готовым выражением.
17 := - не является частью синтаксиса выражения в Обероне, однако отделяет левую и правую части оператора присваивания, т.е. является разграничителем выражений и вносит вклад в сложность синтаксиса. В общем можно оспорить.
18 , (запятая) - является частью синтаксиса выражения литерала множества и входит в синтаксис вызова процедуры. В этом качестве может конкурировать с операциями за операнды, а значит, понятие приоритета применимо

Итого 7-8, а не 4. В два раза хотели нагреть. Понятно, что до 18 ещё далеко, но разрыв уже менее драматичен. Если сравнить с лиспом, то будет видно, что синтаксис далеко не самый простой возможный. Можно ещё отдельно рассмотреть синтаксис "выражения-типа", хотя он намного проще и можно пренебречь. А кстати, как в Обероне будет читаться a < b = c < d ? В Oberon online такое не компилируется, а я уже хотел придраться. А при том (a<b) = (c<d) - компилируется. a < b = bool - нет, а (a<b)= bool - да. Что-то это подозрительно, но что из этого следует - я пока не понял. По всей видимости, это означает что операции сравнения являются какими-то другими, чем арифметические. Потому что у них нет связывания. Мы же можем написать а + b + c, но не можем написать а = b = c, и даже TRUE = FALSE = TRUE, хотя тут всё булево, и казалось бы, почему нельзя? Похоже, тут нужен специальный костыль в компиляторе, чтобы так было нельзя. Впрочем, не уверен, что это влияет на рассматриваемый вопрос.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB