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 |
Вы явно переоцениваете степень моего доверия людям ![]() 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 (от девятого апреля).
|
Автор: | Иван Денисов [ Пятница, 05 Май, 2023 11:14 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu, спасибо, всё учтём, проверим, опубликуем. |
Автор: | Иван Денисов [ Понедельник, 08 Май, 2023 13:53 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): вот обещанный улучшенный стандартный интерпретатор... Обсудили с Борисом, что возражений против поддержки действительных чисел нет. В целом все изменения в коммите поддаются осмыслению и понимаю, поэтому не вызовут каких-то подозрений сообщества. Будет здорово, если кто-то ещё потестирует новый интерпретатор, добавил в последнюю сборку 151. Вложение:
|
Автор: | 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/ |