Автор Тема: Числа в Обероне  (Прочитано 8535 раз)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Числа в Обероне
« : Ноябрь 23, 2014, 01:46:30 pm »
Смотрю в отчёт Оберона 07 ревизии 10.3.2014

integer = digit {digit} | digit {hexDigit} "H".
real = digit {digit} "." {digit} [ScaleFactor].
ScaleFactor = ("E" | “D”) ["+" | "-"] digit {digit}.
number = integer | real.
...
expression = SimpleExpression [relation SimpleExpression].
relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
SimpleExpression = ["+" | "-"] term {AddOperator term}.
AddOperator = "+" | "-" | OR.
term = factor {MulOperator factor}.
MulOperator = "*" | "/" | DIV | MOD | "&".
factor = number | string | NIL | TRUE | FALSE |
 set | designator [ActualParameters] | "(" expression ")" | "~" factor.

Правильно ли я понимаю, что отрицательные числа в Обероне не включены в определение number?
Обратите внимание на SimpleExpression. То есть знак минус рассматривается не как часть отрицательного числа, а как математическая операция над неотрицательным числом?!

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #1 : Ноябрь 24, 2014, 01:33:18 pm »
Правильно ли я понимаю, что отрицательные числа в Обероне не включены в определение number?

Ага. Поэтому, например, нельзя использовать отрицательные числа в CASE.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Числа в Обероне
« Ответ #2 : Ноябрь 24, 2014, 08:27:44 pm »
Тогда что должно дать в результате выражение
-10 DIV 3

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #3 : Ноябрь 25, 2014, 04:24:49 am »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #4 : Ноябрь 25, 2014, 04:39:09 am »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
Это исходя из какого пункта репорта?
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Числа в Обероне
« Ответ #5 : Ноябрь 25, 2014, 07:23:30 am »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
Это исходя из какого пункта репорта?
Из синтаксиса, получается.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #6 : Ноябрь 25, 2014, 08:21:53 am »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
Это исходя из какого пункта репорта?
Репорты Оберон-2 и КП, п. 8.2

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #7 : Ноябрь 25, 2014, 11:41:01 pm »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
Это исходя из какого пункта репорта?
Репорты Оберон-2 и КП, п. 8.2
Про эти языки в этой теме речь и не шла. С тем же успехом можно ссылаться на стандарт С++
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #8 : Ноябрь 26, 2014, 04:16:08 am »
Тогда что должно дать в результате выражение
-10 DIV 3

-10 DIV 3 = 0 - (10 DIV 3)
Это исходя из какого пункта репорта?

Это исходя из:

SimpleExpression = ["+" | "-"] term {AddOperator term}.
AddOperator = "+" | "-" | OR.
term = factor {MulOperator factor}.
MulOperator = "*" | "/" | DIV | MOD | "&".
factor = number | string | NIL | TRUE | FALSE | set | designator [ActualParameters] | "(" expression ")" | "~" factor.

с учётом приоритетов операций.
Учитывая, что Оберон формально не описан, приходится додумывать...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #9 : Ноябрь 26, 2014, 07:12:59 am »
Репорты Оберон-2 и КП, п. 8.2
Про эти языки в этой теме речь и не шла. С тем же успехом можно ссылаться на стандарт С++
В этой части в языке никаких изменений нет.
Репорт Оберон-07, рев. 10.3.2014, п.8.2:
Цитировать
The operator ~ has the highest precedence, followed by
multiplication operators, addition operators, and relations. Operators of the same precedence
associate from left to right.
DIV относится к мультипликативным операциям (см. в этом же пункте далее).

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Числа в Обероне
« Ответ #10 : Ноябрь 26, 2014, 11:52:02 am »
Правильно ли я понимаю, что отрицательные числа в Обероне не включены в определение number?

Ага. Поэтому, например, нельзя использовать отрицательные числа в CASE.
Исходя из этого, OberonJs на соответствует описанию языка Оберон?

Т.к. условие
( (-5) DIV 3 ) # ( -5 DIV 3 )не соблюдается.

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #11 : Ноябрь 26, 2014, 03:06:04 pm »
Исходя из этого, OberonJs на соответствует описанию языка Оберон?

Т.к. условие
( (-5) DIV 3 ) # ( -5 DIV 3 )не соблюдается.

В языке Оберон DIV и MOD вообще не определены для отрицательных операндов. Даже в Оберон-2. Только в КП такое определение есть.

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #12 : Ноябрь 26, 2014, 03:13:05 pm »
Нет, ошибаюсь, не определены только для отрицательного делителя.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #13 : Ноябрь 26, 2014, 06:41:23 pm »
Исходя из этого, OberonJs на соответствует описанию языка Оберон?

Он соответствует виртовскому репорту от 1.10.2013. В моей интерпретации (и с помощью Алексея).

Т.к. условие
( (-5) DIV 3 ) # ( -5 DIV 3 )не соблюдается.

Приоритет унарных операций у Вирта не определен. Согласно грамматике унарный минуc применяется "после" DIV (в отличие, например, от унарного "~"). В результате приоритет получается очень странный. Впрочем, например, приоритет логических операций у Вирта тоже странный.

Я бы сказал, что надо сделать так как в референсном компиляторе Вирта. Алексей нам скажет :)

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Числа в Обероне
« Ответ #14 : Декабрь 20, 2014, 05:42:37 pm »
Правильно ли я понимаю, что отрицательные числа в Обероне не включены в определение number?
Обратите внимание на SimpleExpression. То есть знак минус рассматривается не как часть отрицательного числа, а как математическая операция над неотрицательным числом?!
Что мешает внести нужные изменения в лексику?

В своей версии Оберона я бы так и сделал, но конечно не стал бы включать знак минуса '-' в числовую лексему. Отрицательные числа можно представлять с помощью суффикса 'M' (minus), в том числе для знака минуса десятичной степени вещественного числа, независимого от знака самого числа, а также добавить INFM вместо -INF. Сначала я предполагал использовать суффикс 'I' (inversion), но для отрицательных вещественных с масштабным множителем это приведет к комбинации букв 'IE' - совершенно незачем рекламировать эту говноподелку мелкософт. Также, пусть это хуже для зрения, я бы заменил десятичную точку на суффикс 'P' (period), тогда все числовые лексемы подобно идентификаторам станут букво-цифровыми, лексика станет более однородной.
integer = (digit {digit} | digit {hexDigit} "H") ["M"].
real = digit {digit} "P" {digit} ["M"] [scaleFactor].
scaleFactor = ("E" | "D") digit {digit} ["M"].
number = integer | real.