OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 10 Ноябрь, 2024 22:49

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Улучшения в StdInterpreter
СообщениеДобавлено: Четверг, 13 Апрель, 2023 14:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
предлагаю забрать у меня StdInterpreter из этого коммита. надо чуть-чуть косметики (убрать UP, ещё мелочи), чтобы вернуть его в компонентный паскаль, и будет полностью совместимый со старым, плюс дополнительные радости:
* скипанье лишних точек с запятыми;
* поддержка синтаксиса типа `StdLog.String("boo"):Ln` (т.е. двоеточие обозначает "использовать модуль из прошлого вызова);
* поддержка математических выражений (int, longint, real, сложение строк, понимает функции типа `sin()`, `cos()`, и ты пы.);
* автоматическое преобразование типов, если возможно (int -> short, etc.), что позволяет вызывать более широкий диапазон экспортированых процедур. в частности, реалы, булы, строки, короткие строки, короткие инты, длинные инты, etc.

круто, удобно, герметично, коммандеры станут ещё более вкусными.

также после этого предлагаю поправить код коммандеров, чтобы он понимал закавычивание одинарными, двойными и обратными кавычками. тоже удобно.


чтобы было понятно, что может новый интерпретатор: вот это вот всё может (плюс у меня коммандеры понимают разное закавычивание).
Код:
^Q";;LamentdevLog.String('boo!'):Ln;;"
^Q ';;LamentdevLog.String("foo!"); LamentdevLog.Ln;;'
^Q `;;LamentdevLog.String("goo!"):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(660):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Real(666):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Real("666"):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Char(33):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Char(21X):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Char('@'):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Char("@"):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(0000000000000000000000000660):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(0):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(0000):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(660 + 6 * 2 DIV 2):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(660 + 12 - 6 * 4 DIV 2 DIV 2):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int(660 * (3 - 2) + 6):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Real(666 / 10):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int((-1) MOD 100H):Ln;;`
^Q `;;LamentdevLog.String("goo!"):Int((-10) DIV 3):Ln;;`
^Q `LamentdevLog.Int(ABS(1)):Ln`
^Q `LamentdevLog.Real(SIN(1)):Ln`
^Q `LamentdevLog.Real(PI):Ln`
^Q `LamentdevLog.Real(PI+100):Ln`
^Q `LamentdevLog.Real(SIN(PI)):Ln`
^Q `LamentdevLog.Real(COS(PI)):Ln`
^Q `LamentdevLog.Real(POW(2, 16)):Ln`
^Q `LamentdevLog.Real(ARCTAN2(2, 16)):Ln`
^Q `LamentdevLog.Real(ArcTan2(2, 16)):Ln`
^Q `LamentdevLog.Real(ABS(COS(PI)) + PI):Ln`
^Q `LamentdevLog.Bool(TRUE):Ln`
^Q `LamentdevLog.Bool(FALSE):Ln`
^Q `LamentdevLog.String("'" + 21X + '"'):Ln`
^Q `LamentdevLog.Int(ORD('A')):Ln`
^Q `LamentdevLog.String(CHR(ORD('A'))):Ln`

документацию я пока не дополнил, правда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 20 Апрель, 2023 00:45 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
кстати, о коммандерах. если забрать у меня DevCommanders, то помимо обработки трёх видов кавычек можно ещё в меню засунуть:
Код:
   "Exec Commander"   "*E"   "DevCommanders.Exec"   "DevCommanders.ExecGuard"

можно будет пинать коммандеры с клавиатуры. не знаю как вам, а мне ужасно неудобно тянуться к мышке каждый раз, когда надо коммандер пнуть. не знаю, почему омики этого сразу не сделали… хотя у оберон-систем в принципе очень странное отношение к клавиатуре как к чему-то не очень полезному.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 20 Апрель, 2023 19:58 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Спасибо за разные предложения, попозже проанализирую, что может пригодится в сборке. Новый синтаксис и математические функции — явно перегиб. А вот одинарные кавычки для коммандеров и поддержка действительных чисел в интерпретаторе — это прям хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 20 Апрель, 2023 21:12 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
ну, я бы сказал, что это удобно как калькулятор: помните, я калькулятор хотел? вот, совместил. вы всё-таки посмотрите: там кода не так много, обычный recursive descent. ну, и если не хочется Math туда тащить — то математику можно легко выкинуть (вы увидите). опять же: все расширения совершенно опциональны (для пользователя), весь старый синтаксис как работал — так и работает. можно просто взять как есть и не анонсировать лишнее.

это я к тому, что в интерпретаторе практически все кишки переписаны полностью, так что просто выдернуть поддержку REAL-ов и разных кавычек, например, будет — скорее всего — сложнее, чем забрать полностью как есть.

а. ещё я бы порекомендовал забрать из моего Strings парзеры чисел: я их чуть-чуть подрихтовал, добавил понимание суффикса "L" для StringToLInt, разрешил в числах подчёркивания ("1_000_000", удобно же!). это вряд ли что-то поломает, оно обратно совместимо.

все эти штуки у меня в LC активно тестируются в боевой обстановке (я сейчас пишу код практически исключительно в LC), так что можно быть более-менее увереным хотя бы в отсутствии грубых ошибок. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 20 Апрель, 2023 22:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Вы явно переоцениваете степень моего доверия людям :) У вас там >900 строк нового кода, всё попеременяли. И хотите, это в продакшн... При том, что StdInterpreter — это сердце Блэкбокса, которое через Dialog.Call вызывается повсеместно. Там надо всё анализировать поэтапно.

UPD. Это уже явно не StdInterpreter, а продвинутый интерпретатор для вычислений. И ничего страшного, если он будет отдельным. Устанавливается то он всё равно через хук. У стандартного интерпретатора скромные утилитарные функции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 21 Апрель, 2023 01:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
Иван Денисов писал(а):
Вы явно переоцениваете степень моего доверия людям :)
неа, это я так хитро пытаюсь вас спровоцировать сделать code review. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Суббота, 22 Апрель, 2023 09:49 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
arisu писал(а):
Иван Денисов писал(а):
Вы явно переоцениваете степень моего доверия людям :)
неа, это я так хитро пытаюсь вас спровоцировать сделать code review. ;-)
Давайте, пожалуйста, без манипуляций. У меня ни чувства юмора ни эмпатии для такого нет. А когда понимаю, что меня дурят, то как-то перестаю доверять человеку.

Весьма ограничен в ресурсах на внедрение новых вещей с сборку. Поэтому, если что-то большого объема, и ещё вне основной цели публикации стабильного выпуска, то маловероятно, что смогу это как-то переварить ближайшее время. Но задел на будущее отличный.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
ну, если бы я хотел вами как-то манипулировать — я бы так открыто об этом не писал. неиронично и серьёзно заверяю, что ни задачи, ни намерения добиться чего-либо при помощи манипуляций у меня нет. извините, это была просто шутка, без скрытых смыслов. я постараюсь в дальнейшем учитывать ваше замечание, а вы мне подарите benefit of the doubt, пожалуйста.

вообще, я просто закидываю сюдя всякое, что мне кажется подходящим для офрелиза, а уж дальше вам решать, брать, не брать, и если брать — то в каком виде. ну, и если не брать — то может на следующие версии пригодится, так что пусть здесь упоминание будет. ;-)

если хотите — могу чуть позже сделать на основе StdInterpreter из mainline поддержку REAL'ов, и вообще более гибкую обработку чисел, чтобы то же `-1` подходило и для BYTE, и для SHORTINT, и так далее. без математики и глобальной переписи. там намного меньше изменений будет, и в основном всё изолировано в одной процедуре-исправлялке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 24 Апрель, 2023 21:37 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Договорились. Спасибо большое за вашу активность в целом! Очень здорово, что вокруг Блэкбокса на форуме образуется здоровая тусовка пользователей, которые делятся наработками по сборкам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Вторник, 25 Апрель, 2023 07:15 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
вот обещаный улучшеный стандартный интерпретатор, с добавлеными преобразованиями типов, поддержкой REAL, и тремя типами кавычек (дополнительные кавычки нужны в пару к поддержке разных кавычек в коммандерах). заодно докинул поддержку целых вида `dig%base` (`Strings.StringToInt()` их умеет разбирать из коробки, надо только правильно собрать все символы в сканере). всё равно там пришлось добавить кода для сканирования числа в два этапа, так что поддержка `%base` особо ничего не усложняет.

плавающие поддерживаются без изысков и scientific notation. то есть, `1.2E+3` парзер не поймёт. доделать несложно, но вот тут сканер станет запутаней, и особого смысла его усложнять ради этой фичи я на данном этапе не вижу.

интерпретатор проверяет типы параметров процедуры, и если допустимо по диапазону, то преобразует INTEGER в BYTE/SHORTINT (или LONGINT/REAL).

вроде бы всё работает, BBCB запускается, команды выполняются. если вдруг я где-то ошибся — то сделайте скидку на то, что я болею, у меня температура, plz. ;-)

в качестве базы взят текущий на данный момент git head (от девятого апреля).


Вложения:
Interpreter.odc [12.54 КБ]
Скачиваний: 182
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 05 Май, 2023 11:14 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
arisu, спасибо, всё учтём, проверим, опубликуем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 08 Май, 2023 13:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
arisu писал(а):
вот обещанный улучшенный стандартный интерпретатор...

Обсудили с Борисом, что возражений против поддержки действительных чисел нет. В целом все изменения в коммите поддаются осмыслению и понимаю, поэтому не вызовут каких-то подозрений сообщества. Будет здорово, если кто-то ещё потестирует новый интерпретатор, добавил в последнюю сборку 151.

Вложение:
Снимок экрана от 2023-05-08 17-41-35.png
Снимок экрана от 2023-05-08 17-41-35.png [ 47.41 КБ | Просмотров: 7728 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 08 Май, 2023 15:19 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
Иван Денисов писал(а):
Обсудили с Борисом, что возражений против поддержки действительных чисел нет. В целом все изменения в коммите поддаются осмыслению и понимаю, поэтому не вызовут каких-то подозрений сообщества. Будет здорово, если кто-то ещё потестирует новый интерпретатор, добавил в последнюю сборку 151.
отлично, спасибо!

в принципе, надо бы ещё DevLinkChk поправить до кучи: там копипаста парзера из стандартного интерпретатора живёт. хотя это не очень критично: вряд ли в ссылках-линках будет что-то кроме вызова открытия документа со строкой, так что оно терпит. это я просто только недавно заметил.

вообще, мне ужасно не нравится вот эта конкретная копипаста, но я не представляю, как можно из интерпретатора высунуть хук чисто для синтаксиса без запутывания самого интерпретатора и добавления туда кучи мусорного кода для, по сути, одного частного случая.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Улучшения в StdInterpreter
СообщениеДобавлено: Пятница, 09 Июнь, 2023 18:57 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2460
Откуда: Россия, Томск
Ради интереса, а как вы сделали активацию командера с клавиатуры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Улучшения в StdInterpreter
СообщениеДобавлено: Пятница, 09 Июнь, 2023 19:31 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1481
собственно, тоже командой, которая в меню повешана на хоткей. прямо в DevCommanders и впилил: она просто смотрит, есть ли справа от каретки коммандер, или слева до начала строки. если нашла, то дальше как обычный командероклац: копируем кусок модели после коммандера, вызываем `Execute()`.

пришлось впиливать прямо туда, потому что жадные омики не стали делать `Execute()` публичным. сделали бы — можно было бы кинуть куда-нибудь в StdCmds, а так — увы.


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

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


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

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


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

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