OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:36

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 23 Апрель, 2020 10:03 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Товарищи, давайте подумаем о том, что командер можно научить понимать скобки после имени процедуры без необходимости это закавычивать. Когда-то швейцарцы просто поленились цикл написать разбора, а просто брали команду через TextMappers.String.

Но эти избыточные кавычки - тот ещё визуальный мусор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Апрель, 2020 13:03 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Плюсую. Можно, конечно, это сделать как расширение, но польза мне кажется всеобщей, поэтому неплохо внести прямо в DevCommanders.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Апрель, 2020 14:59 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Да, поддерживаю.
Еще бы интерпретатор допилить, чтобы понимал действительные числа в аргументах процедур после коммандера.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Апрель, 2020 18:18 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, действительные и SET-ы тоже можно сразу.
Плюс ARRAY OF SHORTCHAR, LONGINT, SHORTINT и BYTE.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Апрель, 2020 23:38 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Илья Ермаков писал(а):
Товарищи, давайте подумаем о том, что командер можно научить понимать скобки после имени процедуры без необходимости это закавычивать.

Надо просто добавить к вьюшке "енд-коммандер" вьюшку мидл-командер, которая отделяет текст команды от кармана с параметрами.

^Q DevCompiler.CompileOpt("xxx") | Module1 Module2 ~

Если есть мидл-командер, то команда для Dialog.Call читается из промежутка [Pos(^Q) +1, Pos( | ) ). Если нету, то как обычно для сохранения обратной совместимости.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2020 01:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Лишняя обязательная вьюшка - это неудачное решение. Не снижаем визуальную громоздкость для основной массы случаев.

Я подзабыл, что часто применяется несколько вызовов в одной команде:

(!)"Cmd1;Cmd2;Cmd3" input

Тогда может быть, например, следующее решение:

(!)"... работает, как раньше.

(!)Cmd(... работает как вариант с одним вызовом в команде. Команда завершается на ), дальше - input.

Для варианта (!)"серия вызовов" я бы сделал более благозвучный вид - и оставил бы кавычки для возможных вложенных сочетаний в параметрах.
Какой благозвучный вид? Ну, например: (!){....}.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2020 02:31 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вложение:
Снимок экрана в 2020-04-24 02-29-21.png
Снимок экрана в 2020-04-24 02-29-21.png [ 26.91 КБ | Просмотров: 5528 ]

Код:
StdCoder.Decode ..,, ..Pg,...3Qw7uP5PRPPNR9Rbf9b8R79FTvMf1GomCrlAy2xhX,Cb2x
 hXhC6FU1xhiZiVBhihgmRiioedhgrZcZRiXFfaqmSrtuGfa4700zdGrr8rmCLLCJuyKtYcZRiX
 7.2.s,6cp.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7O
 NbXmb.2.oxNk2Enb,,6.,U08J99SdfJHPNjvQCJuGKfaqmY6MwdONl1QCh0708T,U..w.2mN.,
 sUGpmWbBxhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.pw3w,ImLE.0E.M.ps.cU.ktAcoZimBhWhioh
 gnZcZRCY.2.A46.I16.M.,.J7.tfj1.0E65.o0czzzzzr2k.8Mtr.0E.696.c4E.k.0.e0.,6j
 3.G.0kOE,8Mtr.0E.s76.,UO.,EMF.c8.2Uw0S.CE,9z4U.EeE.EBU.6g2U.EJ.6.V2I4s.,U,
 w.2UoU.oTM9s.P,,cAEzV0U2Ikmj,6.YD2.I12U.U,2.I3k.E6V.A065M.5.m,CkAE,O.CkCE.
 i,4E1E.y,0Ez,s.rs.6Rs.7.,cpEZE.4E.M,3gwP.,6.wH2U.EBU.U,.JFA0z.U.2Gk.U9U3A.
 s5.MCM,E.i0.S1.m0K.64M,UX.U6U1Q.2UNU1A52UDD.oT.Gk.E18Mtr.0E..UOU.2.V3,Ue6T
 .072UEU1Yv4U12.Gk6U,.x5C.I02UEV,o.s1s.h03.Ck5E.a34.2UQU,w.MBs.J.3c00U1252U
 BU,I,2U33.o.6qszPuH7OJNOF,7F9fR5uPPPP1fP7PNZvQrN1B7cPM0dOKVOFPM0HcJHPNeGEq
 HE0pbaIbGpW8JEGpb0mU8odGJd4oVGJE8pWCob8JW0GIOpoKan,am4ak2KIbGoRqk2akaaKmOp
 oc8.....Un,a0.gciZgKBhZd8.....Un,a0o7gVa2oBM0b8R7fJ66v76V0.8pWC2.aGEKIbGoR
 A,bWBBhYp822...gddZAM8.U3phYp822...gciZAM8.P.WGJeGEGoo8rmCKuyat3YeIZdgVBAV
 EJeDRc3ZcJJe33YcYgu2Y2BB.H76RONjf8,78HdC,dJHPNmGEuoWSJK0mU8od.rN1H6IZ0...U
 BBhYJZU2ZdkaaKm........MFR9NJ76F,9eP7fJ...g,6IZ0U13hZRgfhddZgU2ZmZgu2YIhgs
 ZC6PIeZBgYhgmRbUwdJZeUghdZgu2Y7pdIhc5hcGRbUw7QghZgu2YExd7VG,1eIZOEn86TeF,t
 EFOEZO8rN1HM0hOEZ86hfC,dJHXn,iHEaKK0GsyqteHEaIbsFM1HcE9uFHeHPM0H6QTvQ,dCv7
 6Z9NR7ITvQFN8r76HeF,dTZ9NRNNT9R,7JFOFR867OF588VvPbP8,NFM0Fd8,dP99Sd9659O1f
 Q,NMB9R9fQ,dJHXUIZdgV7AV7pcUIiYpZqBhZlF0GbaIa0GeW2OLEenS00.98HbOF,dQ7HdKqk
 oedFIOrI0mWu2PM0HsJFOGNOF,dTZ9NwBqk2ak2aEH0GI0JtyKsKKtGroKqtuGeWqoCLeaLsKK
 IOLK0GFGomOrV.ELO38mI0mS0GbaIaaGEqk2aU7o2......MHH9Nh0..AVa.......9eP7fJ..
 0GWyo4ak2aEtGKL83Uck4aU3,A7WGv0mF0GbUa2Yc28......P0c6QYUo76JFOFqk2AVhBBenS
 0003FFEqGE4nR0GbKofWmlqKmmGEqqo2Yh2Ykxhn3Yf2YlAZvgV7M0ZXHhgo3ejRic2ijN8r76
 H96pND,7Ar76j8GH8H2ij76t76PPOYcD3YmZgiI8QccBgm3ZXhhYRfdhfdQbUAdCRccAhdQbU.
 VXd22.CqqGqh66pND2fBAV7gcARe3hV7AV7gBI5qmMiHECqqGKEe1ROGqk2aUCN1HMFRGECIoK
 4sCPM1H6I.MFlPN5PRdPN,78dfC,7JW56PgdjVv2YkxhnJ5.2YKBcG3YZphYJbUA7.KLrmqr4K
 meHE8obyIaKoUuoIin4cJsQp76buM1fPRPNZvC,dM9vNN76PPOmGE8rmCLR0mY.sMPHR28Ed..
 .rN1.sM22UvgV7sQRtQRtETfPRPN59RduPF7RHtC,tQRtQRtI99R.amRQCUD3ioRicQjIhgsZC
 19QVPNZvQ8rmGru8LrOpoKanZZUYeZ3D.ghVRifpedhgrNTHtCPUHRgVphcQidQbUAcHRe3JeI
 3ZnpZn7Rn9Q996v7699S9vMPOMZvON76X7AVN8rN1HkVWqmC42ZnVmBhYhgmZZUghdVXhBHtCP
 U7llqKm0mS0Gb66W2M0b1bWE,2Yf.M0b0k4a.HWnpZn7R.XPR19PH9N9fPd96d8G.HcH9uJF,N
 FaKIbWmtumsKrkm467H76L76XVUQAuJEenSQiiAC.gV7AV7gcANGB86b1a56J99S.sQdfQHfPD
 96d8G90AVC,Y3.bnt.7N8,t8.o9Un,k4ak2g6.YC..UdphqBggBhY3YI37U7QCQ8..g,AVHVAx
 hixgHZimBBWmtumtICUXhBH,gcCN1g6i1a25XUQYUo7.kYMPH9N,t6qmM0GeW2,tQRVH,ghdZA
 L76XVUQCICc9ZON19N,NFR8Fk28qmSKEenS.VuPb98HtCaIXsQRtQRdQUZxho7JEWElKqnaGEK
 20mXKKu0pk8rWWLuKKrGKICLL.8LKggiZgdQbBU,ReHh6ojXZhZBgihgmBdiRioBggZhZZgg2Y
 l2alAZvg,QdZJiihggpZEhin3hIJiV3i1ZBEICKqKqkkIiHECKqK4A7.0GR6JZOJ9uCPM0o72i
 VJidQ5VPMZf9dPNlHEe1dvC,7Q1XWhgb32IgZxgv2YkBAKKrGKEenSggiZgvgV7kYMRR9P66d0
 KJrmqr685PP797HlWu2P.7OO19PTvNRtE19PN985PPmWW2YWYZU2YmhAHtCP.VPMZ96pNDu2r,
 i2Uj3iIJiV,EI.A3C4kY..OoUmodKoRqk2gcANFP.70sIFvPjvIdPMdPRb983t6bOSb9R9PPpt
 InfPdPMlPFZfQTfQ3N8PM0KIbg,9WUgcshAfXvgVBo2qk2WGJ0mdGLmq2EEe0P.6FEIOLR0mdG
 5.HFdKqtGrr8rm0GIOKR0GfktuGX8rkqqmiHEmKK0GumGE8LK0GleHEaIbsFAZvU1xdCReI3Yp
 3Yx2YkxhdphoRbBA,h05fC,NHT9NQC5uPGrmsC,NMp76dONlnay4NX,,MNiHEOqruKueHEOoru
 KuCLLOoruav2YXxhgxhmJbU2ejJioRiiQ6NXvg,HM0bPOpPNN761vQ599,7NbvMN76BvRp76H0
 sCP.VvPHfPCLR0mU8JdEO0mbOIE0prUExhdlRcE.42EvumlyKrG50mF0Gb69,dAVN8rN1QgUIb
 xcRRtM.rN1HM0jOGd8G,tMp76dONlnaEqsETfPEEG2196pNDCKL4Iu68HtC,dNTXUIbxMMRdNT
 Xv.2Yug5QgjZhjN1HM098H2Yaxhi76cFTfPCbYBhmpZ2hgaBgpZho3ZdQbUQgjVUUExhm,9fN1
 15uPNXBUCtCcNTfPdf9DONdfETPRR9Nb981vQ5XY,BnIin4sQ66pND4qtCKEiGEGqtCqRqk2aE
 sUnRfkgfi2jUIbx6ArFsyqo.AjUIbxsQHfS9vCPM0.AaRpZs3224.Ut32k4a..ZNLR7S,,f96L
 76FdNj967OGh86ZN8r76VvP.AjUUk..CniuGw00K5...Ut32QC66PM0HcNR7FZPMj9I19RF98V
 vPH1N76d790pr85OqomKqmGECqrm4N76VuPklmqrCrmGKcyKqarIqk2KIb2YGhgn,rN1PM0sE.
 ..A3FOMR9NNPNVeQT9QPuQD96FdJ1eIqqtSKR0Gc8rrgAUBhgnRiVxgZBZvg,O3C4P0.kR006S
 q2m410H1.I5kto6Q51vQ599G4NFnI5H0.30kfUhRibFc.UEJiZpgZJiZphXhgUYcDh,akf...s
 IHfS0JtKKn0GWyo4k2CauEv.sCP.HMG2ZX3YX22A3BVXNGb86dONg7U1,AZUY8g,ak2AgUIbxs
 MF7J99Sq2.UdoZ,Zio78cN66MMRdNM1Hk2akWm2UUU4Vn7NH1.Fl4ak2ak2KIbQ5M0BvPo3..Y
 AcNamRU7ghnxgi2hUIbxMMbHE.r76PvQDf9j96pNDOqv0GJ0mN0GWa2dN1HM0mLEqqtI5.UGhg
 nBhu,.AVhVaBhshgY32Y8gV7A,t1..ocjRgpRiEJiZpA.HMP6OT9RBuP5PR0GRq1.m5Ee2DbON
 d9R9fQbHc85.aklUq,kRU7A7kF..H0WbBVgd9.aGE.AV7MMkl.P0.kIu0.EEkku0g,AV3Z7.,,
 B0b1..M09eH.HcNc9..mWhRCR7NbvMNFnM1HM0m5I5VeQ.6Jn9Q99IZPN.AV7p6bONZfRHvM9v
 QRNGb98h99,NPoZoBDaGEGJY66PvQoidhA,dCvFv0mWuIWqU7MFNWB.Rm4MFN0gcCV3FEWoku4
 sPq2rN1PM1H68U3FfgAe0B7c.6FHfQ9XjNS,lIqk428UGVYldG5.AZUUU2ZdI5h0rN1HEfEv.h
 0cEcHcHcRHtC,dI98JfeIR86hP1HMFRWCtRrN1PM0..U2,UUUBBB,78HdCq2.HM0.ka.EVEb..
 ...Q5P...6F.66MFRHEWmIMF.M0.kW.EVEb.....Q5P..YcZ3ijRidZieQbBA,.OposQGom0rr
 EIGqo8LLuomSLIamIqk2U2hgk,rN1...qooGKJin4...Uc.MH2ZdAZB..g7i1...9eP7f8r,..
 .23.9WcAZd..MFQ5..bONd9FHfQJ76F7NpFWaaZ,amRqU0VCVYBhm3YuEmqk2UHhgoVvgVBA,.
 MGRPOdvCPM0A6GKR0md6FgAkRq..u2GqIiHEGqo8LEUv2YnZiYZ600M1o7QgghAIidklm4MGMM
 .oc,tIi19eHAdiBBgV0hc5,HePH9RPMFR8FGYq,MNM13QwdONQcjpBZvPN9P9fQbndGb1ZimZh
 2hgnRg.AS..oZ1,U2hgnRg.sEMMggmRCEt...ktu0.Y62Um1,.d.,.HE.2U..U,Iklb8IepZhZ
 JinpZHFdKLq6F6.XDJ.QiiIepZhZ7F6.Zz.E.ses,sc6.,k,Fw.CLLC3b8Rn9P99F9vQ59.X5.
 u0n9PU.Iy5E.2.U6UO7.,6.,U00.umUG5HXoFWE.Y.2..EGE.4E.E.EECOh2U.6.tfj1kDza.A
 .A.2U.E,9z42.0..I16.M.EJ21U.2m,.,.E4Wj.Y,YZPS9L6y0I,5TWkqK4bf950..V6.2..E2
 E.U76.2n9RC,t75J.nT32kwL,lsHFHEfGA,6g0...
 --- end of encoding ---


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2020 14:12 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
А можно тильду использовать как отделитель цепочки команд от параметров (вместо мидл-командера):

(!) Cmd1; Cmd2 ~ blahblah <Commander End>
и тогда par.beg - номер символа за тильдой.
И тогда можно сохранить обратную совместимость, избавиться от кавычек, не вводить новый мидл-коммандер, оставить {} для множеств


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2020 14:45 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Супер радикальных новшеств не хотелось бы...
Вот убрать кавычки обязательные и расширить возможности интерпретатора немного, это было бы весьма деликатно, косметический ремонт. Чтобы не было культурного шока у всех пользователей :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Апрель, 2020 23:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Денисов писал(а):
Супер радикальных новшеств не хотелось бы...
Не хотелось бы.

Хотя обсуждать радикальные новшества полезно -- иногда удивительные простые вещи находятся именно так.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 01:46 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вы, товарищи, решения в коде предлагайте. :) Решение с вьюшкой наиболее общее и простое. А со всякими тильдами придется синт. анализатор засовывать в DevCommanders, хотя он там не нужен, т.к. за вызов команды отвечает сервис Dialog.Call.

Поэтому вопрос открытый, что с какой стороны лучше.

Мне в свое время предлагали в WorkTOCBuilder для пометки элементов оглавления использовать специальные вьюшки вместо StdLinks.Target с особым ярлыком, я не стал. Потом много раз вспоминал. Потому что в этот ярлык много инфы не засунешь, решение получилось без возможности его развивать. Здесь это соображение вполне может быть применимо.

У вьюшек потенциал есть в плане документ-ориентированного интерфейса.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 01:50 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
adimetrius писал(а):
(!) Cmd1; Cmd2 ~ blahblah <Commander End>
Вложение:
Снимок экрана в 2020-04-25 01-49-52.png
Снимок экрана в 2020-04-25 01-49-52.png [ 10.21 КБ | Просмотров: 5450 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 08:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
С вьюшкой, пожалуй, единственное узкое место - ещё одно горячее сочетание клавиш нужно. А они и так "забиты".
Либо учить F5, нажатый после первого командера, сам подставлять среднюю и конечную.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 11:00 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Евгений Темиргалеев писал(а):
adimetrius писал(а):
(!) Cmd1; Cmd2 ~ blahblah <Commander End>
Вложение:
Снимок экрана в 2020-04-25 01-49-52.png

x := TRUE; Log.Bool(~x)

Коллега, ну это уже целый ваш интерпретатор, это гораздо шире, чем сформулированная Ильей задача!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 13:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
adimetrius писал(а):
Коллега, ну это уже целый ваш интерпретатор, это гораздо шире, чем сформулированная Ильей задача!
Это лишь пример того, как предложенное решение ломает обратную совместимость без возможности что-либо сделать. Вы же не можете утверждать, что это единственный пример, когда ~ есть в параметрах.

С мид-командером она тоже теряется из-за изменения интерфейса DevCommanders.dir, но это хотя бы решается перекомпиляцией клиентов.

Может быть есть лучшее решение. Но мне думается, что оно лежит вне области манипуляций с текстовой разметкой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 14:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Илья Ермаков писал(а):
С вьюшкой, пожалуй, единственное узкое место - ещё одно горячее сочетание клавиш нужно. А они и так "забиты".

Да, есть такое. Первое, что мне пришло в голову, вставлять сразу начало и середину, которая избавляет от написания кавычек.
Код:
"#Dev:&Insert Commander"   "Q"   "DevCommanders.Deposit; DevCommanders.DepositMid; StdCmds.PasteView; StdCmds.PasteView"   "StdCmds.PasteViewGuard"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 16:50 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Я помню, что когда я с ББ и системой Оберон знакомился, то сильно удивился, что в таких открытых системах (в смысле open source и в том смысле, что среда разработки не отделена от пользовательского кода) нет возможности повторно использовать куски парсера. Например, компилятор в исходниках понимает несколько вариантов написания целочисленного значения (десятичное, шестнадцатиричное и т.п.), но вместо того, чтобы дать прикладному коду эту же возможность, эту же поддержку форматов, которая с необходимостью в системе уже присутствует, в модуле Strings наворачивают копипастой несколько новых функций StringTo*, о которых не известно, насколько они вообще отлажены по сравнению с тем же компилятором. (Даже юнит-тестов нет в комплекте.)

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

Как так получилось? Чего-то я тут не понимаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 17:23 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Александр Ильин писал(а):
... Надо распарсить и выполнить кусок кода. Почему бы не использовать компилятор для этого? Он же точно должен такое уметь, да ещё и на ошибки внятно укажет при их наличии...


Это интересная, кмк, мысль! Сейчас компилятор Dev/CP2 - "монолит", с единственной точкой входа - компиляцией целого модуля. Любопытно было бы спроектировать "открытый" - который позволяет разбирать или компилировать куски, например, соответствующие тем или иным правилам грамматики.

В Обероне не было "выполнить кусок кода". Там команда - это всегда M.P, где P - экспортированная процедура без параметров.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 17:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
StdInterpreter делался для практических задач типа вызова в меню команд, вызова охранников. И тут размышляли как в Обероне "Лучше меньше!".
Тут не надо полного компилятора. Так и получилось.

Цитата:
StdInterpreter

DEFINITION StdInterpreter;

END StdInterpreter.

Модуль StdInterpreter предоставляет в Блэкбоксе дополнительный сервис: вызов после­до­вательностей некоторых типов процедур Компонентного Паскаля, которые (после­до­вательности) заданы в виде литерных цепочек. Допустимы инструкции следующих видов:

Proc = PROCEDURE
ProcI = PROCEDURE (x: INTEGER)
ProcII = PROCEDURE (x, y: INTEGER)
ProcS = PROCEDURE (s: ARRAY OF CHAR)
ProcSI = PROCEDURE (s: ARRAY OF CHAR; x: INTEGER)
ProcSII = PROCEDURE (s: ARRAY OF CHAR; x, y: INTEGER)
ProcSS = PROCEDURE (s, t: ARRAY OF CHAR)
ProcSSI = PROCEDURE (s, t: ARRAY OF CHAR; x: INTEGER)
ProcSSII = PROCEDURE (s, t: ARRAY OF CHAR; x, y: INTEGER)

ProcR = PROCEDURE (IN s: ARRAY OF CHAR);
ProcRI = PROCEDURE (IN s: ARRAY OF CHAR; x: INTEGER);
ProcRII = PROCEDURE (IN s: ARRAY OF CHAR; x, y: INTEGER);
ProcRS = PROCEDURE (IN s: ARRAY OF CHAR; t: ARRAY OF CHAR);
ProcRSI = PROCEDURE (IN s: ARRAY OF CHAR; t: ARRAY OF CHAR; x: INTEGER);
ProcRSII = PROCEDURE (IN s: ARRAY OF CHAR; t: ARRAY OF CHAR; x, y: INTEGER);
ProcSR = PROCEDURE (s: ARRAY OF CHAR; IN t: ARRAY OF CHAR);
ProcSRI = PROCEDURE (s: ARRAY OF CHAR; IN t: ARRAY OF CHAR; x: INTEGER);
ProcSRII = PROCEDURE (s: ARRAY OF CHAR; IN t: ARRAY OF CHAR; x, y: INTEGER);
ProcRR = PROCEDURE (IN s, t: ARRAY OF CHAR);
ProcRRI = PROCEDURE (IN s, t: ARRAY OF CHAR; x: INTEGER);
ProcRRII = PROCEDURE (IN s, t: ARRAY OF CHAR; x, y: INTEGER);

Например, вызов процедуры типа ProcII с последующим вызовом процедуры типа Proc может быть представлен такой литерной цепочкой:

"TurtleDraw.GotoPos(35, 587); TurtleDraw.ShowPen".

Такие последовательности инструкций в основном используются в документах, описыва­ющих меню, и при определении элементов управления.

Модуль StdInterpreter активируется при запуске Блэкбокса, и его сервис предоставляется через посред­ство процедуры Dialog.Call.


А потом сделали более гибкую реализацию, и поменялась документация. Как я понимаю, что стало больше возможностей. Например, есть поддержка типа BOOLEAN.
Цитата:
StdInterpreter

DEFINITION StdInterpreter;

END StdInterpreter.


Module StdInterpreter implements a plug-in service for BlackBox: an interpreter for some forms of Component Pascal procedure calls. The text string to be interpreted must conform to the following syntax:

Command = Call { ";" Call }.
Call = ModuleName "." ProcedureName [ "(" Parameter { "," Parameter } ")" ].
Parameter = Integer | String | Boolean.
Integer = Decimal | Hex.
Decimal = [ "-" ] Digit { Digit }.
Hex = [ "-" ] HexDigit { HexDigit } "H".
String = " ' " { Char } " ' ".
Boolean = "TRUE" | "FALSE".

The calls are executed in the given sequence. Parameters corresponding to integers must be of type INTEGER. Parameters corresponding to strings must be value or IN parameters of type ARRAY OF CHAR. The called procedures must not return a value.

For example, the following string can be used to call the three given procedures:

"TurtleDraw.GotoPos(35, 587); TurtleDraw.ShowPen; TurtleDraw.WriteString('Hello')".

PROCEDURE GotoPos (x, y: INTEGER);
PROCEDURE ShowPen;
PROCEDURE WriteText (IN text: ARRAY OF CHAR);

Such statement sequences are used mainly in menu command configurations and in control properties.

Module StdInterpreter is installed during startup of BlackBox. Its service is made available through the procedure Dialog.Call.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Апрель, 2020 17:46 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Евгений Темиргалеев писал(а):
Это лишь пример того, как предложенное решение ломает обратную совместимость без возможности что-либо сделать. Вы же не можете утверждать, что это единственный пример, когда ~ есть в параметрах.

Почему же, могу. Тильда в параметрах (нынче) может появиться только внутри строки. Совместимость сломается, вероятно, только с вашим интерпретатором.

По идее, можно и без тильды обойтись, и без мид-коммандера. Нужно только построить "жадный" поглотитель команд:

Команды = Команда {";" Команда } | СтрокаВКавычках.
Команда = Квалидент ["(" Выражения ")"].
Выражения = Выражение {"," Выражение }.
Выражение = Число | Строка | Булев | Множество.

Тогда в примере
(!) Log.String("Hello, World!"); Log.Ln; Do.Something with this text
выполняется три команды, а DevCommanders.par.beg на "w".
А в нынешнем коммандере эта команда выглядит так:
(!)"Log.String('Hello, world!'); Log.Ln; Do.Something" with this text

Единственный параметр, который "не по зубам" такой схеме - тот, который с ";" начинается:
(!) Do.Something ; with this text

Кмк, это вполне допустимое ограничение.

"Жадность" ограничивается другим коммандером или end-коммандером.


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

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


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

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


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

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