Текущая реализация компилятора:
VAR n: INTEGER;
n := 33;
n IN {1} = TRUE or range error if enabled
VAR s: ARRAY 2 OF SET;
s[0] := {}; s[1] := {1};
n IN s[0] = TRUE (* обращение идёт к s[1] *) or range error if enabled
Хотелось бы исправить прежде всего реализацию (n IN s) до математического поведения при отключённых проверах границ, т.е.
n IN s = FALSE, ~(0 <= n <= 31)
чтобы иметь возможность писать чисто
x IN {3, 5, 7}
(см.
http://oberoncore.ru/library/wirth_sets) вместо
(0 <= x) & (x <= 31) & (x IN {3, 5, 7})
а заодно исключить некорректное обращение к памяти (n IN s[0]).
Второй момент --- вычисление SET-значений, но он менее критичен.
У меня есть варианты решения, но недостаточно знаний, чтобы выразить его в терминах кодогенерации компилятора ББ. Надо разбираться, а это не быстро. Товарищи, кто уже в теме, поглядите. Сложно ли это внедрить?
n IN s = (n <= 31) * (n MOD 32 IN s) s IS reg
MOV ECX, n
CMP ECX, 31
SETBE AL
(*MOV EDX, s *)
(*AND ECX, 31 *)
BT EDX, ECX (* CF = ECX MOD 32 IN EDX *)
SETB AH
AND AL, AH
MOVB result, AL
n IN s = (n <= 31) * (n MOD 32 IN s) s IS mem
MOV ECX, n
CMP ECX, 31
SETBE AL
AND ECX, 31
BT s, ECX
SETB AH
AND AL, AH
MOVB result, AL
Код:
StdCoder.Decode ..,, ..zm0...3Qw7uP5PRPPNR9Rbf9b8R79FTvMf1GomCrlAy2xhX,Cb2x
hXhC6FU1xhiZiVBhihgmRiioedhgrZcZRiXFfaqmSrtuGfa4700zdGrr8rmCLLCJuyKtYcZRiX
7.2.s,6FN,,k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7O
NbXmb.2.Imfk2E3j0,6.,U08J99SdfJHPNjvQCJuGKfaqmY6MwdONl1QCh0708T,U..w.YafU.
2U18J99SqorGqmQCbWBxhYFWUl1UnNHEWUmr.6.wqdk5kLb0,6.,U,Yo9U00.bnUGLu8ro8quG
rmCLWKqtE0E.ELU.EBU.U,2.I3l6w1.0E65.2.c8fP3d8mBE,5TeEdKLqKKtCLLCJuIepZBGom
Crl0ks,ktuGdKLqKa2V.Iy1U.2.q9S.C80E.QE.sQRtIQeoBjghg2hgn7.X5.u0n9PU.Iy5.,.
60cKE.cU.UiAco,.2.7.,..Y22U,U.2.2YXK9FR81EnXE,wnjl.k.E.0.C.2.grPL.9AS3E,5T
WKKvCorqqq4KrGqm8rtumdYgK,6.XDF9fR.ELO3U.Iy1.,UIU.U4.,k8EAk.8Mtr.0E.6C6.c4
E.yD2.eG..2UE0u.AU.U.Ux0EtD,2.0G.6.c,E.g0o26.Mj..2.000.O.2.f.1,,6.Mj..2.00
0.O.2.f.d.,.q9..,UUU.U4.,k8.2.Mj..2.000.O.2.f.E.Ux0.E.666.c,E.g0g02U.UQQd0
s4Rd.8ssDJuGKaaKriqtuGe4KtSqmGLWKqtC4U.kAU.E6E.M.F.5uPR9R99Sd9.3cUZT1E.c9E
.c4E.szE.e0c.6YU.Ume.iFL..YddphfZcZRC.0.J0,6.242.4EIkdGLmm2CbH3hjxiIBgmxAW
mHKnWGHOOHOOHWCIW0nUWnQ4HWSmIIU2U0.Z3Umr06.I26.2,2..3M.c.,.Z3.U.EZU.EME.M.
kd....kW8HO0nQ0HMKoVSmIIUF.EN,.6.I26.2,2..3M.E.EN,.6.A52U.EME.M.kd....Uoga
kIapwaq2abA35cUZT1E.sAE.c4E.szE.eWwpr,c.6YU76.8.0EN,.6.I26.2,2..3M.E.EN,.6
.I76.242.4.Q8....kV0HWOnQanNSmIQUAU0.Z3.U.EFU.E2E..IU,U.2.Y1Q1k8U.EFU.E2E.
.M.,.,.ZJ,.o06.YB2.I86.4EZko8nMCrwCrV4Kqmqtumb0rmuKISGoGLu0LRymLOqr8ruqKLy
KlKKtyKrCqr8rmuGtKrLOroKaoxhkBhXpZk3hkxbahblQaloYohbnYalAabA33MBE.EN,.2U.E
9U.E2E..676,3gwP.0.N,,.p.0..JFAE.6.VQ.k,UCU3Ikmj,6.oN2U.EBU.U,2.I3.0ES9.o.
cU,6.4E3E.y3,M.FH.2UbBU.M,B.G74E3Ur7.2B2UtV,.,Mt1.xzzzzzS40EzVQU3o.6g3U3o.
MWM.1.,6AM.U0G.4EoE.4o.M.1U.6AM.1.W20.Y1Q1k8U.kNU.kAU.M.X.fNFd7B6FMEE.Kk6E
.0.m,..,UOD.6.W.0..36.gU56.g5czEAE.uDQ0.A2.212Uy1h,,.Q5.I6.o..Q5.2C2Uy1tF.
2Uy1L..X.9.o2czEL.E5.ER.k5.kD.k5.kD.k5.E,,k7.E8E.uDw..Q1.Q,.o0.Y22Uy1f2,.Q
0...h..l.,czk3.E9.EGE.uDQ0.Y3gU0.16.czkR3..h.0.m,..,Un.,UN.,k.4,K1kW81nFM6
.9M26.,.t..U.E9U.E2E..M.,U4Ikmj,2U.kNU.EBU.U,.JFyA.,U.2GkjD.B.SyG8Ua5V0cU.
,UW.,UN.,k.4,K1Uog4Z,0k18Mtr.0E.sA2.,UO.,.16.c8.2Uw0aU.c,,.D5.E.0.D,0.F.,.
U,U4gs0E1Ub1.6.,Un.,UN.,k.4,K1.506.D61c,,.D5.E.0..2,2..BMm2.pzzzzzi,yT,WGJ
qE,GomOrV6QH9P9fQRtETPPEeWqoCLEGomOrjGqmObERco2bqQZBIU2hAy4cQ.Y8.UE,Pc.7W2
hgXxhYhgmpZ2hgXVUYcZpC.k48EWKaT,UiYeZRioBaBIU2,..8n48EW...bN136F..UogVBIU0
Ad,RamIUBIU2lV2eigcs3iZJinRidxhiJUBI.EVumYuK,qE,.50aIrk48EoGLu0LR...IC....
Aa0gVeAZBoVBxd2heAhcUYcZ,.in4qk2aoa0pb8Je0Gayqnin4qk20JdyoVKIWKJdKIEGpmCLu
4HJin4ak2OpU8p2uKR0mYuIeKoXKIdiHECLR0mdKIein4aEVKoXaIbqk2aEIemt0GRqHEirNCn
yin2WGJ0mlyqqUUYidhhZ3YmBgixgZ3YZJimxhm3YeAZUIZdgV7AVi3YugbUQanQbBAV7QiUIb
xsSRPTrN0FVmhiiZidhhZ,.MOB969fP1fMNPN796JN8P68JN1,76,76hOEZ86RfC,NG.gZlIaB
2YU.Qiu2266PNAhN1BeAV7AV7AX7Ap76,76,76PuHh86,760mWCIgmmhKIV0JKqmM8niak2WHV
GHWOIOqEX8HMUnIbU2YU665OHVWUkWkN4n2aEQCHXanMOo4OIN.hdC,76,FEeIVKIE0GE2YYoc
m2akU,BV7waq2amgV4J4EQeHE00,7JZOEV86,76On2aEQGoWOn4O2kUeHE0GE2YB,2Y3BcMZZl
AV7Ics2al2ak2ak24PcFZ,4HXeHE00,dIT8H,76,76K2CIaak2GoNCIMqEX81Ial.0ma.0mhKI
VUqgfggc,3f7AVsAboga43aBgVn3Yu.qkt0mS0mM0mdWIa0GrmGEuKEmnS0mN4n4CLE6AN76x9
8R96t,am4CLE68R96t,2Ye2YcAaUQ8M8PM1PuHhO09uEl89,dPP6KTeIHMF18KN769OEqkVqIc
akWCIgsAXN1bOFdeE9O018HPcIT8HHMF18KQcAhVBxdKtQN769OEIZdgV76HTvNRtI99RFtQHt
C,7HTvNR7HRvCH68JlxCnN0mayIW0mN8ny0mS0mx4ny0mkCLE8rmCrumKu0moOKEGqoCrk8KqK
4M09eH786dmtsCPM1H.506JcAJtCPM0O3YZUghu2Y7p7.bfCUB...qmNmGEGnNqrRa.C4aKq..
.I3JN8Pk2u4gZnQbUghUIbx2YoQavgV7sQkxuKLumqqrRaEIcQ...aKngA.68.h0R1.g3ZN1.g
hu22.EPqEE00kt.0Wm2aBocm.dNFp76,VUg7UUgc1lh.8ni6C30.galIbU220mVq20090b,C1.
EOeHE00,dG662YY.6CHM0jdB.EPeHEEEG366O1..ldC,,,NH.,NF1GKqmMak28Y4pc4pc4VBoc
m.GIR0GE66b8GNGE0GEg6QcA,98APcFZ,ocu222YB,2Y3R6i3EPqp2aU0VkgV4,OHNeHE00,tE
EEMFsAkN..KHR0GE66J0667,kQak2SXk.UrIbU220Ge.,FP..MCp76,VUg7UUgc23fggZmAV7I
c,pc3pc4pc4p6P.kWeHE00,tIUUMFsEN0IaBocm.j7Ap76,VUodDZeU2YU229W7AV4xa2JaBo6
UmIbU220mUuIW0GE229OEgc2398nNCINqEX816Bp76,VUg7UUQ9EN0nimmW4Y7.KoVqk4CLEeX
U.M1b96vlxqLK0GzW0MPH76TeI,78P96t76VN8,tHZWnAaUYbUohdsQ,NDgd,3fcohg2YkAZio
ZBBdC3ZhZZUQalAZxZZU2Zi32Ua2Yy3ZcghUEM22.oBHN1HsQ,ND2aioZnAaxZZU..WGr0WU24
OGEQ4MPHN1H.Uhhjg22MD.u4,,MPgbUQ4qk2.RXnA4.vlq.V76tND,dPH76B76C1..gB.gBEMU
i,q4Q4oYUiVeA3Y7Q8.Ea.iLEiry0mkC5.6NAA.aUidCYav2Yh32Q4EakdkxuKLkIin2W0qLEO
GE1GJa090dmtsCPM1.UIVnIZvgV7cJER.UWJbUIcDxdAhc,pdvgV7I6.R1.8KEenSohUAdC3Yv
phUgdDZ6sCP68JN1EfErUI,g3ZN100EleHE.66PlNqEX8HMEV4HR000ma.0mWC2r0Aamg9WHVE
O.6Bp766610,FEg6Q4HUngclAa4h,.jdC,,,NH.,NF1GK4124EMg,U0Rcu2YUEE8ZA760W3V1Z
7sE.MFp7666P06698FmmhK2.Icpga4ZaBo6kV4HR0GE6638J,76,76gc,lWM00HX4oNGIMqEX.
GHR000mdKIe8IE0GEAcABV724ndA58APcF.jdC,762YBFV0GE0WP,QaRZZ,Zd76Cl7BfdFbVi3
Y7pdUQiUgbU23.00uaBx766HeHAZ7QCHuI,dQ9vNPMHTeJK20GrQcB38UnM1kWUcIZBxdKB,78
KN76b96JN8P684IbGo2KoV.,d8HFVGp2KIWW39uEaEIeGECIX0mS0mWCIg0mayIW.gc23fUIZd
sI9W7Ac6hV,pd2BV,Zdg2Y,3dBgdDdEHcQ9vQfXg2Y,ZdBIZdk2m28oryKqWGlamR0GaEa.GJd
KpW0GJaW7g6Y8sCPM1kV.UoIZvgV7AVK,Ee.CLRAcGJe,BfUYaUwd43YHh6rFle1.qU0,sQr8A
v86pNDirMQbUQiPBaR3Yu.UmgfUIbx.kNqJEenS.PM0u4Q4ElUiVUQiP3aRR5cM,dCvFICnN0m
a.H76HeH,VnQaUYc7peUQamgfUgbUA4HeHMAIZd68q.O3u4Y8UhcAP.,dJsQ...PFQqEE0GE.3
1.0WmAbBocm24ockIbU220maoeUUUg6Qf3FKcAvWs6BfdFdN1.CHR0GE66500090bNAsAB8CXd
FPcF.hdC,,,dG662YY.MEHM0j,.2bu2YUEEG366O1..1eC,,,dE00,VP,8HQqJKKYMB,VlUYap
gcogV4J4kWeHEEEC3386MEaUkMC.MAVNAp76,VUg78IEkh.animmUm2l,9uAPM1R1,FE.t,.g7
EEUdEEkqKqqqkayY7sEcP.kNg,MFkUu290EVGZnZZUgc1N1bOFdm2.A66Gq23O0.6HP.a.I6.U
A,Y8c8A,R1,tAdtCPk284oBkh01ElUc6B,NHT8FM8.b7B,7FHeJ.8HEaIbkM.Y7I6.UAN0Fd8,
dF18HbOF,d8HV3,kRqk4KIbGY2hgqlm.oZBoV0Ad,FEaKrCLu8ruCKuaqruqt8k4qkdWIaymd4
Idqk4yIsKKt4Kuaqruq4aIX0GPGnK8ooGLEqorGaUAgiZgUginBhixgUIe33fiweBAVI3d3pdB
A,5vPffPdPH1uIL86VQc,tAB8GrN1HMFNuI9O1HM051.MAB8GrN1BOGP6R9PPVvETOJR8J,7Y1
B6FtETOJMERWXxhppBkIin4Grmqa2hcHZeU2mV8F9uIin4SJYaIaKIEWGuKqq0rV.,fc,7AHN1
H6FTO1HM0HeF,NOR1.,NOb96bOEN86TfQ,tIF8HPM0HM0d8GU7AV1pcU2mV4YBRe03Z2hcHN8r
N1Hk2KIa66Fd8,NGRvQd1.Ed0mr8LECZG3YeAZBM0HM050YdHJccY6.OoYin4MG...m2EaUI,M
07OFb8J,,70SFF1GNin4ak2akWk4k2a2..UGhV7A,HEe.A,G22G.T76ZtC,78J76bOODfP99N,
7NHfRH9N999,dQTPRR9NHfPD96dvPjPMZ9N,dP9vN19RHfR996HfPBPORPOdPS,d8H,aU3VUU7
,.U6J8.HU2,V2kL66r76Fd8KJrCro..,d8H,aEX.B0YiZhB.VYohgh,s2,B6XtCPM0T8FrN198
HH8GjuCPc1ZuHNu9ZuHZO1P68J76ZuHNmkuKmIeDJeUAhi,Un3YeA3bOGpOF,7Y1B6T8Q9fQuK
mCpoermin4CoUCpW0GIGqmGrm8rqaKrKKECqrK5H76TeFPM0bOGp02buAVohgh,6Y23U,Vloc6
BZUgdDZ6ltC,78gdVRif3YXxhpFE8qmOqr8rm0may2JV7Qe7,AaqIb7YiZ,E678.10.MAhtCPM
0bOG.bdApN0d1.VYc.A6.UnsCPM0.oaoM0d1.VYc.A6Qa43dd22cBdtCPMFbOE5uCPM1Fd8Udp
hn,wB,tPVPNZHuUeA3HeF,78dPN.obU2ad2YcI3VeQOrmuKuCLEKLsGqkGrmCLEGrr0mVOIEem
IAVL3d7,.EkUBM07uHM0d1OYEma.A3A,7OF2YEGIGoWC3j.H76L76dPNP1rN1HM0G5w76YYC.Q
0.T8FA,a2AV1p66H.a0aIXQcD,v76XN1HM0d0,tHB86VYB,EEWpb8JECIXU3tIwd43YdRCffP7
PNBPORPN7vCPEXa2BOGrl4W0I8..T1.JV7FuKqqsHETEEUm,0mu0Lm.d1I3a.m2.UU,PU2x7A,
EX0G67HsIZuEHtCPM0HEWK2,7Y23kLM8,VcYiZ,SFF1WUQe7Jf3N8rN1HUo,T007d1.b.kbU3N
G.UB,M8rV7lV.v,Y8.V2.22MHbeE,d23B6X787OFbWvk2KYH,a4.R1o6o6oV0ZeBoYUiVL3hZp
hUAgXRgZRinBhixA1963POd96HfP,NP9PPTfQn99,7RFPN,7QZvP5PNbnr8LEqqkaLE4qlC40G
O0GlaLuKqtQioBgmZidphbdNZvPP96d9O9P1PPNPvP2YVZgYJiZRin3Yaxhm3YV3YnM93POd96
T9Q9Xi76bPOpPNN76fvQElaLEGLo2YaxhgZhjxidphbdQ99P19RHvPCLoaKsen4akWOKnKqlGr
oOrmAcYZgm,L76F7BSFF3Z0Bhoxdapgnhgo3Y2B7M8HN1Rc.7ONhXEp3kt.aEc8Z1VGlWWLs8r
mCbdxBFdJ1eIWLR0GWoi17JRdHT9N9P8rN1HEfkwmGE0LtKKK0Gq4qtGLR0GW.Uv2YjJgeJbUY
cZ,yIleqmCKuiXmhAUu2Y0BfIhcvgV7I666bOOP9QNPN98SVfQC56SHtCPM0HMG2ZZBig3Ywg5
bPSaGEO0bPSP96tNDSqm4rI0GeWoWuo4EtKKq442Yug5bPSiHEGomkdumXKKuWmtabdQbUQedh
B..arIin4M0VfQ996pNDuoYmoR0Gq4qt2YugbU.PM0HkYEwuGuaLsumlyqq0LEaIb0mx4It8rk
aLK0GWaLr4It8ryaGEO0l1IcVRiZZet3iiogjJih3Y7p759O1fQbONdP8,7JF0M07ONhX0tIdf
Q7ONZPNB98lP8PM0akWuYvg,A7AjiYit3C51kx...ADEV.oA.51..aEW..kwam4ak2g6.70sEF
PN5vO3ORBfN8rouqnWGwmGEuoYmIK0GbUkJCNFqkIin4....Ajg2YCB7o76Q...sHV98ZPNN1Y
ZU2jg2YtBZv.HWkJiZ3YX2YCBdA3YI3d3767ONU1xhiRioJC2ZCRgjhBN76VXg6SHtC,7QZPNR
7RnHEenS2jiYCiHEWLEenS2imhgUgcCZcBAV7gcANGB86bPSP96vlouKEGJYKYBU2,b0Ud..sQ
.iHEG2I6HGIWLK00PU3,EEkt0GeWoW.UH,kIg,A7C5,,7PNR9RGJY.aksKrkmqoG4Wmr8KpamR
qk2M0HWjJgepZhxhYlS0GeabUYe6FE.3GeaLsGpmCbc2jg2YjJgeZZUoc,Z7am4aU7AV3lW0mm
8LtWmO8nIqk2aU7gcCN1A,N0koGqmM8PM0cHkWU3p7,NFl9Q.in4uE,G2kYI.HEd.MGRf8FdJ1
Ws,6Ju2MSp7670.a0o8ogu2YH3dDJeIBdCZev2YfJbUAdCZe3,PEVUUogUIbx6SELUvU7FIWbX
ZhVRin3Yx2YCZit3iZBZUw7WGw.UkJijRgd2YDJ8abXZhV,YC...056JF09fQZnM8HPam4aU3Z
7HWcogUAdC3YdphoReZZidc7Euc9EEqHECpmG5d0P.HWa3Yx2Y7phopao2YIVUQcjdR9fQd98l
99GomO5AhitAZ7Rn9QH769eHi1a.WLLC4.5vPRvQ0GeW2P.HsO,dCv76QgjphqBggpZdFv4Kqi
n4a.HMG2Zf3Yw2Ykkb83LHT0GWK4qILqokWrdK4UUgAIakIadgV7M0HMFUtpZX,.C5Usp3oC.2
Yug53uPT9PduPHePd98L96HeH,NSRlr.bXqBggBZv2YspZjJge3Yug5RWBAV7AV7g6KY0BhiZg
CxhYhgn3ZCZgj3ig2Y2,dGly4dPSV99,7SNlwQ5lntKLlCKq0GRqXdphBAV7M09eHqU7Ea....
......u2gcAVZVtIadg,KIb2YvgV76SR7RnHEe17ONh1.gV7g6AdiRbBoV0.C2A7..c8,78hOE
ZGwmGEIbU.mIOWHPuWohAHtCI6odBkYMSOqr85UUYe6V13hZRAF7SNFMmGECXdMFR0Y6.wcZph
0Bhoxdk3Z0Zeg2Yslwa0BeQ9PNF7SHtCO2AjdQbBM0bPNdvE588l99mqtCLK0GX42mGEOoUkIi
HEWGJQgVJimBjUQiZZiUIZdkW.IY2iW2iZ24YlQaiAaloZm2aloaUAasIbmYauAap2Yf24V7AP
cUXDJ99SCoruKu8rrmKqKKtCLLC358RZ9P7ONbvM,MwdGw..umVyKrG5EWE.QcjlkaKrICUm,.
.Unp3.6F6.ZD,2U.UIE.0.a.0E..k.8cCU.2.4K.s,MK6.,k,9T66.,.E2kT2.0.3gwZ.0..Y2
2U,2.2.2YXG.0U.ow6I.zY.AU.k.E.0.3o42.0..I10U.U,.JFA.0E65.2..N6yY,YZPS9L6y0
I,5TWy4PPNQiiQcj,.kAU...F.,.aU.EAjot2YbQI,AzJE.nT32XD3h.2oe2n..8U0...
--- end of encoding ---