Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

особенность функции VAL
https://zx.oberon.org/forum/viewtopic.php?f=34&t=438
Страница 1 из 1

Автор:  budden [ 29 окт 2018, 23:30 ]
Заголовок сообщения:  особенность функции VAL

В BlackBoxComponentBuilder функция VAL(INTEGER,"a") возвращает код буквы а, т.е. 97. Для строчки VAL(INTEGER,"ab") вернётся 256*97+98. Где-нибудь описано такое поведение? Ааа, хотя это всего лишь интерпретации первых букв строки как значение типа INTEGER при определённом порядке байт... А я-то пытался из этого вывести что-то про особый способ кодировки коротких строчек :)

Автор:  Zorko [ 30 окт 2018, 17:58 ]
Заголовок сообщения:  Re: особенность функции VAL

budden, функция SYSTEM.VAL обозначает "интерпретировать содержимое куска памяти по такому-то адресу как значение такого-то типа". Ваше "а" размещается в памяти в виде строки: код символа "a" и завершающий строку нуль. Если "a" это короткий однобайтовый символ, то Вы пытаетесь получить 4-байтовое число из двухбайтовой строки в памяти. То есть число будет состоять из двух байт строки и двух байт мусора.

Автор:  budden [ 06 ноя 2018, 13:31 ]
Заголовок сообщения:  Re: особенность функции VAL

Код на это не похож. Вот ссылка на кусок, который делает (он в нашей слегка переименованной копии, но не суть).

https://gitlab.com/budden/nkp/blob/master/k/Ня/Mod/Д.kp#L1697

(ссылки с кириллицей на вашем движке не работают). Вот для справки ссылка на оригинальный код:

https://gitlab.com/budden/nkp/blob/mast ... B.kp#L1692

Автор:  Zorko [ 06 ноя 2018, 16:01 ]
Заголовок сообщения:  Re: особенность функции VAL

Что Вы хотите этим сказать? Что VAL(INTEGER,"a") трактует "a" как символ и константный литерал, а не как строку? (тут вспоминается Patrik Reali с его критикой такой неоднозначности)

Ссылки кириллицей — да, много где не поддерживаются. Форумный движок же буржуйский.

Автор:  budden [ 06 ноя 2018, 20:30 ]
Заголовок сообщения:  Re: особенность функции VAL

Разврат мозга (т.е. отладчик) показывает, что "a" - это константа типа char8, а "аа" как раз попадает в указанную мной ветку. Как обрабатывается char8 - я пока не понял.

Последняя версия движка ПШПББ поддерживает урлы в кириллице.

Автор:  budden [ 10 ноя 2018, 19:57 ]
Заголовок сообщения:  Re: особенность функции VAL

Тема ещё не была раскрыта. Она понимает юникод:
Код: "OBERON"
  1.  
  2. MODULE Бережок; IMPORT SYSTEM; BEGIN
  3. ASSERT(SYSTEM.VAL(INTEGER,"ж")=1078);
  4. ASSERT(SYSTEM.VAL(INTEGER,"b")=98);
  5. END Бережок.
  6.  
  7. (* ^Q "Kernel.LoadMod('Бережок')"
  8. *)
  9.  

Автор:  SovietPony [ 11 ноя 2018, 00:46 ]
Заголовок сообщения:  Re: особенность функции VAL

Вроде всё логично, если строка из одного символа интерпретируется как [SHORT]CHAR.

Неоднозначность можно было бы решить если разрешить использование $ к константам.
Но не знаю насколько это нужно. Где ещё такая неоднозначность может вылезти? В gpcp вообще нет SYSTEM, а мой компилятор Оберона для jvm вообще генерирует инвалидный код для данного случая, гыг.

Автор:  ivan_denisov [ 23 ноя 2018, 05:47 ]
Заголовок сообщения:  Re: особенность функции VAL

Ссылки Кириллицей вполне возможно вставлять, если пользоваться тегом URL и копировать после url= ссылку из строки браузера с процентиками (в Firefox она именно с процентиками копируется).

https://gitlab.com/budden/nkp/blob/master/k/Ня/Mod/Д.kp#L1697

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/