Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 18 ноя 2018, 08:01

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: особенность функции VAL
СообщениеДобавлено: 29 окт 2018, 23:30 
Не в сети

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 30 окт 2018, 17:58 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 06 ноя 2018, 13:31 
Не в сети

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

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

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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 06 ноя 2018, 16:01 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 06 ноя 2018, 20:30 
Не в сети

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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 10 ноя 2018, 19:57 
Не в сети

Сообщения: 271
Тема ещё не была раскрыта. Она понимает юникод:
Код: "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.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: особенность функции VAL
СообщениеДобавлено: 11 ноя 2018, 00:46 
Не в сети

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

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

_________________
Извините, хоть и пони, но не толерантный и не терпеливый. Ну щито поделать.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB