OberonCore
https://forum.oberoncore.ru/

Улучшения в StdInterpreter
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6940
Страница 1 из 1

Автор:  arisu [ Четверг, 13 Апрель, 2023 14:13 ]
Заголовок сообщения:  Улучшения в StdInterpreter

предлагаю забрать у меня 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`

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

Автор:  arisu [ Четверг, 20 Апрель, 2023 00:45 ]
Заголовок сообщения:  Re: BlackBox 2.0

кстати, о коммандерах. если забрать у меня DevCommanders, то помимо обработки трёх видов кавычек можно ещё в меню засунуть:
Код:
   "Exec Commander"   "*E"   "DevCommanders.Exec"   "DevCommanders.ExecGuard"

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

Автор:  Иван Денисов [ Четверг, 20 Апрель, 2023 19:58 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

Автор:  arisu [ Четверг, 20 Апрель, 2023 21:12 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

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

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

Автор:  Иван Денисов [ Четверг, 20 Апрель, 2023 22:03 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

Автор:  arisu [ Пятница, 21 Апрель, 2023 01:01 ]
Заголовок сообщения:  Re: BlackBox 2.0

Иван Денисов писал(а):
Вы явно переоцениваете степень моего доверия людям :)
неа, это я так хитро пытаюсь вас спровоцировать сделать code review. ;-)

Автор:  Иван Денисов [ Суббота, 22 Апрель, 2023 09:49 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

Автор:  arisu [ Понедельник, 24 Апрель, 2023 01:12 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

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

Автор:  Иван Денисов [ Понедельник, 24 Апрель, 2023 21:37 ]
Заголовок сообщения:  Re: BlackBox 2.0

Договорились. Спасибо большое за вашу активность в целом! Очень здорово, что вокруг Блэкбокса на форуме образуется здоровая тусовка пользователей, которые делятся наработками по сборкам.

Автор:  arisu [ Вторник, 25 Апрель, 2023 07:15 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

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

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

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

Вложения:
Interpreter.odc [12.54 КБ]
Скачиваний: 335

Автор:  Иван Денисов [ Пятница, 05 Май, 2023 11:14 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu, спасибо, всё учтём, проверим, опубликуем.

Автор:  Иван Денисов [ Понедельник, 08 Май, 2023 13:53 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu писал(а):
вот обещанный улучшенный стандартный интерпретатор...

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

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

Автор:  arisu [ Понедельник, 08 Май, 2023 15:19 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

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

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

Автор:  Александр Ильин [ Пятница, 09 Июнь, 2023 18:57 ]
Заголовок сообщения:  Re: Улучшения в StdInterpreter

Ради интереса, а как вы сделали активацию командера с клавиатуры?

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

собственно, тоже командой, которая в меню повешана на хоткей. прямо в DevCommanders и впилил: она просто смотрит, есть ли справа от каретки коммандер, или слева до начала строки. если нашла, то дальше как обычный командероклац: копируем кусок модели после коммандера, вызываем `Execute()`.

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

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