OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 22 Сентябрь, 2018 08:28

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




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 03:04 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
GUEST писал(а):
Всё там в порядке с унарными операциями. Как и у всех.

В порядке, но унарный минус не относится к операциям :mrgreen:
Oberon Language Report писал(а):
The syntax of expressions distinguishes between four classes of operators with different precedences (binding strengths). The operator ~ has the highest precedence, followed by multiplication operators, addition operators, and relations. Operators of the same precedence associate from left to right.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 10:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
PGR писал(а):
GUEST писал(а):
Всё там в порядке с унарными операциями. Как и у всех.

В порядке, но унарный минус не относится к операциям :mrgreen:

Вот вот. Там, у кого в порядке можно написать так:
Код:
-------------------------------x + ++++++++++++++++++++++++++++++x

В Обероне КП нет унарных + -, есть возможность указать + - в начале выражения:
Код:
Expr    =   SimpleExpr [Relation SimpleExpr].
SimpleExpr   =   ["+" | "-"] Term {AddOp Term}.
Term    =   Factor {MulOp Factor}.
Factor    =   "(" Expr ")" | ... .

Такие правила требуют записи + - как в математике:
Код:
-5 + (-x), но не -5 + -x


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 13:28 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
GUEST писал(а):
AVC писал(а):
[NB в Обероне нет трактовки минуса как унарной операции]
Всё там в порядке с унарными операциями. Как и у всех.

Я имел в виду (прежде всего), что у "унарного" минуса нет особого (более высокого, чем у "бинарного") приоритета. Вот простой подтверждающий пример:
Код:
MODULE AvcUn;
   IMPORT Log;
   PROCEDURE Do*; (* (!) AvcUn.Do *)
   BEGIN
      Log.Int(-3 DIV 2); Log.Int((-3) DIV 2); Log.Int(-(3 DIV 2)); Log.Ln
   END Do;
END AvcUn.

Т.е. в выражении -3 DIV 2 не -3 делится на 2, а сначала 3 делится на 2, а затем полученное частное вычитается из нуля (в полном соответствии с приоритетами обероновских операций: у мультипликативных операций приоритет выше).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 13:39 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
kreol писал(а):
AVC писал(а):
Насколько я понимаю, речь идет о выражении в грамматике уровней приоритетов операций...

Спасибо! Теперь стало гораздо проще читать :D

Если ответ хотя бы немного помог, спрашивайте дальше! :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 14:51 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Евгений Темиргалеев писал(а):
Вот вот. Там, у кого в порядке можно написать так:
Код:
-------------------------------x + ++++++++++++++++++++++++++++++x

Нельзя


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 15:14 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
PGR писал(а):
Евгений Темиргалеев писал(а):
Вот вот. Там, у кого в порядке можно написать так:
Код:
-------------------------------x + ++++++++++++++++++++++++++++++x

Нельзя
Верно, так нельзя. (Результат инкремента уже не есть lvalue.)
А вот немного "скромнее" написать можно:
Код:
x+++x
или так
Код:
x+++x++
или даже
Код:
x+++ + + + + + + ++x


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 15:58 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
AVC писал(а):
Верно, так нельзя. (Результат инкремента уже не есть lvalue.)

Здесь проблема не в декременте, а именно в унарном отрицании.
Если исправить на
Код:
- ------------------------------x
, то будет работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 16:14 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
PGR писал(а):
AVC писал(а):
Верно, так нельзя. (Результат инкремента уже не есть lvalue.)

Здесь проблема не в декременте, а именно в унарном отрицании.

Что касается унарного минуса, то его приоритет в некоторых языках отличается от приоритета бинарного брата и даже может быть выше, чем у мультипликативных операций. Например, в языке Си:
K&R, 2.5 писал(а):
The binary + and - operators have the same precedence, which is lower than the precedence of
*, / and %, which is in turn lower than unary + and -.
См. также таблицу в K&R, 2.12. Там у унарных + и - 2-й уровень приоритета, а у бинарных -- 4-й.
Когда я говорил об отсутствии в Обероне "трактовки" минуса как унарного (возможно, это неудачное выражение), я имел в виду, что в нем нет таких "тонкостей".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 16:28 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
-------------------------------x компилятором понимается, как -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -x и выполняется в соответствии с приоритетами сначала унарный минус, результатом этого является выражение, а не lvalue, которым дожен быть аргумент декремента. Здесь и возникает ошибка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 16:50 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7848
Откуда: Троицк, Москва
Борис Валерьевич, может, часть сообщений отсюда перенести в ветку насчет почему нельзя использовать С в начальных курсах? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 17:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
PGR писал(а):
Евгений Темиргалеев писал(а):
Вот вот. Там, у кого в порядке можно написать так:
Код:
-------------------------------x + ++++++++++++++++++++++++++++++x

Нельзя
Поставьте пробелы везде между + - и будет можно. Я имел ввиду префиксные +-, а про инкремент/декремент совсем забыл :lol:
AVC писал(а):
Результат инкремента уже не есть lvalue...
Если я еще не совсем забыл Си :), то результат постинкремента не есть lvalue.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 18:35 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Евгений Темиргалеев писал(а):
Поставьте пробелы везде между + - и будет можно. Я имел ввиду префиксные +-, а про инкремент/декремент совсем забыл :lol:

Ну тогда и в Обероне можно
Код:
a := ~~~~~~~~~~~~~~~~b & ~~~~~~~~~~c;

Пробелов добавить по вкусу :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: О приоритетах
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 19:27 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 992
PGR писал(а):
GUEST писал(а):
Всё там в порядке с унарными операциями. Как и у всех.

В порядке, но унарный минус не относится к операциям :mrgreen:
Не относится. Это её знак.
AVC писал(а):
Когда я говорил об отсутствии в Обероне "трактовки" минуса как унарного (возможно, это неудачное выражение), я имел в виду, что в нем нет таких "тонкостей".
Мне кажется, что если писать что думаешь, то будет больше порядка с извлечением смысла высказываний собеседниками по ходу дела.Кстати, понять что именно хочется знать вопрошавшему означает наполовину решить его вопрос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 23:52 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Евгений Темиргалеев писал(а):
AVC писал(а):
Результат инкремента уже не есть lvalue...
Если я еще не совсем забыл Си :), то результат постинкремента не есть lvalue.

А насчет ++x есть сомнения?
Давайте проверим. Напишем
Код:
int x = 0;
++x = 2;
и подсунем это компилятору Си. :)
Так что... завидую! :)


Последний раз редактировалось AVC Вторник, 13 Ноябрь, 2007 00:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О приоритетах
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2007 23:56 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
GUEST писал(а):
Мне кажется, что если писать что думаешь, то будет больше порядка с извлечением смысла высказываний собеседниками по ходу дела.Кстати, понять что именно хочется знать вопрошавшему означает наполовину решить его вопрос.

Писать, что думаешь, не так уж и просто.
Надо же еще слова подобрать. :)
Я стараюсь, но получается не всегда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О приоритетах
СообщениеДобавлено: Вторник, 13 Ноябрь, 2007 00:05 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7848
Откуда: Троицк, Москва
AVC писал(а):
GUEST писал(а):
Мне кажется, что если писать что думаешь, то будет больше порядка ...

Писать, что думаешь, не так уж и просто.
Надо же еще слова подобрать. :)
Я стараюсь, но получается не всегда.

А у меня не всегда получается понять, что же из <i>этого</i> я на самом деле думаю... 8(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Вторник, 13 Ноябрь, 2007 00:24 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
PGR писал(а):
Евгений Темиргалеев писал(а):
Поставьте пробелы везде между + - и будет можно. Я имел ввиду префиксные +-, а про инкремент/декремент совсем забыл :lol:

Ну тогда и в Обероне можно
Код:
a := ~~~~~~~~~~~~~~~~b & ~~~~~~~~~~c;

Пробелов добавить по вкусу :lol:

Честно говоря, думаю, что в отношении ~ Вирт просто не досмотрел. :)
А может, он не захотел усложнять грамматику ради устранения совершенно безобидного исключения из правил. (По сути, ~ есть единственная "всамделишная" унарная операция в Обероне.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Compiler Construction на русском
СообщениеДобавлено: Вторник, 13 Ноябрь, 2007 00:40 

Зарегистрирован: Суббота, 12 Май, 2007 08:41
Сообщения: 102
Откуда: Беларусь, Минск
AVC писал(а):
Если ответ хотя бы немного помог, спрашивайте дальше! :)

Ну пока что из того, что читаю, всё более менее понятно (не сразу, но после 5-7-ого прочтения точно :D ). Хотя я медленно продвигаюсь - в день максимум могу уделить времени час-полтора. Так сказать как сказку на ночь :) К тому же приходится многие вещи переосмысливать, как это было с factor. Но основную тенденцию докумнета вроде бы понял. Если что, обязательно спрошу, спасибо =)
AVC писал(а):
...или даже
Код:
x+++ + + + + + + ++x

Недавно как раз разбирался с классической "заморочкой" Си (не помню, где её увидел, может быть даже здесь, извините за дублирование, если это так):
Код:
i = 1;
i += i++ + ++i;
i == ?

и с её продвинутым вариантом :D :
Код:
i= i++ + ++i + i++ + ++i + i++ + ++i + i++ + ++i;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Действующее описание грамматики.
СообщениеДобавлено: Вторник, 13 Ноябрь, 2007 05:58 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 992
AVC писал(а):
А может, он не захотел усложнять грамматику ради устранения совершенно безобидного исключения из правил. (По сути, ~ есть единственная "всамделишная" унарная операция в Обероне.)
Суть грамматики в её описании. Суть того, что хотел считать операцией Вирт - личное дело Вирта.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 13 Ноябрь, 2007 08:02 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
GUEST писал(а):
AVC писал(а):
А может, он не захотел усложнять грамматику ради устранения совершенно безобидного исключения из правил. (По сути, ~ есть единственная "всамделишная" унарная операция в Обероне.)
Суть грамматики в её описании. Суть того, что хотел считать операцией Вирт - личное дело Вирта.

Допустим. А что хотели сказать Вы? :)
(Просто мне кажется, Вы с чем-то не согласны. Если так, то, пожалуйста, критикуйте, не стесняйтесь. :) )


Последний раз редактировалось AVC Вторник, 13 Ноябрь, 2007 12:51, всего редактировалось 1 раз.

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

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


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

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


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

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