diff --git a/arvo/hoon.hoon b/arvo/hoon.hoon index 903648b61..629e9edce 100644 --- a/arvo/hoon.hoon +++ b/arvo/hoon.hoon @@ -132,7 +132,7 @@ $% [%lite p=char] :: literal [%pair p=rege q=rege] :: ordering [%capt p=rege q=@u] :: capture group - [%brac p=@] :: p is 256 bitmask + [%brac p=@I] :: p is 256 bitmask [%eith p=rege q=rege] :: either [%mant p=rege] :: greedy 0 or more [%plls p=rege] :: greedy 1 or more @@ -3677,430 +3677,413 @@ ++ pars |= [a=tape] :: parse tape to rege ^- (unit rege) - =+ foo=((full anns) [[1 1] a]) + =+ foo=((full apex:rags) [[1 1] a]) ?~ q.foo ~ [~ p.u.q.foo] :: -++ nor - ;~ pose - (shim 1 35) - (shim 37 39) - (shim 44 45) - (shim 47 62) - (shim 64 90) - (shim 93 93) - (shim 95 122) - (shim 123 123) - (shim 125 127) - == -++ les ;~(pose (shim 32 91) (shim 93 126)) -++ lep ;~(pose (shim 32 45) (shim 46 90) (shim 95 126)) -++ alm (shim 32 126) -++ alb ;~(pose (shim 32 92) (shim 94 126)) -++ mis ;~(pose (shim 32 47) (shim 58 64) (shim 91 96) (shim 123 126)) -:: -++ anns :: top level rege parse - %+ knee *rege |. ~+ - ;~ pose - ;~((bend |=(a=[rege rege] (some [%eith a]))) mall ;~(pfix bar anns)) - (stag %eith ;~(plug (easy %empt) ;~(pfix bar anns))) - (easy %empt) - == -:: -++ mall - %+ knee *rege |. ~+ - ;~((bend |=(a=[rege rege] (some [%pair a]))) bets mall) -:: -++ bets - %+ knee *rege |. ~+ - |= tub=nail - =+ vex=(chun tub) - ?~ q.vex - vex - =+ a=p.u.q.vex - %- ;~ pose - (cold [%eith %empt a] (jest '??')) - (cold [%manl a] (jest '*?')) - (cold [%plll a] (jest '+?')) - (cold [%eith a %empt] wut) - (cold [%mant a] tar) - (cold [%plls a] lus) - (stag %betl ;~(plug (easy a) ;~(sfix rang wut))) - (stag %betw ;~(plug (easy a) rang)) - (stag %binl ;~(plug (easy a) (ifix [kel (jest ',}?')] dim:ag))) - (stag %bant ;~(plug (easy a) (ifix [kel (jest '}?')] dim:ag))) - (stag %bant ;~(plug (easy a) (ifix [kel ker] dim:ag))) - (stag %bint ;~(plug (easy a) (ifix [kel (jest ',}')] dim:ag))) - (easy a) - == - q.u.q.vex -:: -++ ranc - |= [a=@ b=@] - ^- @ - ?:((gth a b) 0 (con (bex a) $(a +(a)))) -:: -++ flap |=(a=@ (mix a (dec (bex 256)))) -:: -++ rang - %+ sear |=([a=@ b=@] ?:((lte a b) (some [a b]) ~)) - (ifix [kel ker] ;~(plug dim:ag ;~(pfix com dim:ag))) -:: -++ chun - %+ knee *rege |. ~+ - ;~ pose - (cold %ende buc) - (cold %sart ket) - (cold %dote dot) - %+ cook |=(a=(list char) (reel a |=([p=char q=rege] [%pair [%lite p] q]))) - ;~(pfix (jest '\\Q') cape) +++ rags :: rege parsers + => |% + ++ nor ;~(less (mask "^$()|*?+.[\\") (shim 1 127)) :: non-control char + ++ les ;~(less bas asp) :: not backslash + ++ lep ;~(less (mask "^[]\\") asp) :: charset non-control + ++ asp (shim 32 126) :: printable ascii + ++ alb ;~(less ser asp) :: charset literal char + ++ mis ;~(less aln asp) :: non alphanumeric + -- + |% + ++ apex :: top level + %+ knee *rege |. ~+ + ;~ pose + ;~((bend |=(a=[rege rege] (some [%eith a]))) mall ;~(pfix bar apex)) + (stag %eith ;~(plug (easy %empt) ;~(pfix bar apex))) + (easy %empt) + == + :: + ++ mall + %+ knee *rege |. ~+ + ;~((bend |=(a=[rege rege] (some [%pair a]))) bets mall) + :: + ++ bets + %+ knee *rege |. ~+ |= tub=nail - =+ foo=;~(plug kel dim:ag ;~(pose ker (jest ',}') ;~(plug com dim:ag ker))) - =+ bar=(foo tub) - ?~(q.bar (chad tub) (fail tub)) - (cook |=([a=rege] [%capt a 0]) (ifix [pel per] anns)) - %+ cook |=([a=rege] [%capt a 0]) - (ifix [;~(plug (jest '(?P<') (plus aln) gar) per] anns) - (ifix [(jest '(?:') per] anns) - (stag %brac ;~(pfix sel seac)) - == -:: -++ seac - |= tub=nail - ?~ q.tub - (fail tub) - ?: =(i.q.tub '^') - (;~(pfix ket (cook flap sead)) tub) - (sead tub) -:: -++ sead - %+ knee *@ |. ~+ - ;~ pose + =+ vex=(chun tub) + ?~ q.vex + vex + =+ a=p.u.q.vex + %- ;~ pose + (cold [%eith %empt a] (jest '??')) + (cold [%manl a] (jest '*?')) + (cold [%plll a] (jest '+?')) + (cold [%eith a %empt] wut) + (cold [%mant a] tar) + (cold [%plls a] lus) + (stag %betl ;~(plug (easy a) ;~(sfix rang wut))) + (stag %betw ;~(plug (easy a) rang)) + (stag %binl ;~(plug (easy a) (ifix [kel (jest ',}?')] dim:ag))) + (stag %bant ;~(plug (easy a) (ifix [kel (jest '}?')] dim:ag))) + (stag %bant ;~(plug (easy a) (ifix [kel ker] dim:ag))) + (stag %bint ;~(plug (easy a) (ifix [kel (jest ',}')] dim:ag))) + (easy a) + == + q.u.q.vex + :: + ++ ranc + |= [a=@ b=@] + ^- @ + ?:((gth a b) 0 (con (bex a) $(a +(a)))) + :: + ++ flap |=(a=@ (mix a (dec (bex 256)))) + :: + ++ rang + %+ sear |=([a=@ b=@] ?:((lte a b) (some [a b]) ~)) + (ifix [kel ker] ;~(plug dim:ag ;~(pfix com dim:ag))) + :: + ++ chun + %+ knee *rege |. ~+ + ;~ pose + (cold %ende buc) + (cold %sart ket) + (cold %dote dot) + %+ cook |=(a=(list char) (reel a |=([p=char q=rege] [%pair [%lite p] q]))) + ;~(pfix (jest '\\Q') cape) + |= tub=nail + =+ foo=;~(plug kel dim:ag ;~(pose ker (jest ',}') ;~(plug com dim:ag ker))) + =+ bar=(foo tub) + ?~(q.bar (chad tub) (fail tub)) + (cook |=([a=rege] [%capt a 0]) (ifix [pel per] apex)) + %+ cook |=([a=rege] [%capt a 0]) + (ifix [;~(plug (jest '(?P<') (plus aln) gar) per] apex) + (ifix [(jest '(?:') per] apex) + (stag %brac ;~(pfix sel seac)) + == + :: + ++ seac |= tub=nail ?~ q.tub (fail tub) - ?. =(i.q.tub ']') - (fail tub) - ?~ t.q.tub - (fail tub) - ?: =(i.t.q.tub '-') - ?~ t.t.q.tub + ?: =(i.q.tub '^') + (;~(pfix ket (cook flap sead)) tub) + (sead tub) + :: + ++ sead + %+ knee *@ |. ~+ + ;~ pose + |= tub=nail + ?~ q.tub (fail tub) - ?: =(i.t.t.q.tub ']') - (;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub) - (fail tub) - (;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub) - |= tub=nail - ?~ q.tub - (fail tub) - ?. =(i.q.tub '-') - (fail tub) - ?~ t.q.tub - (fail tub) - ?: =(i.t.q.tub '-') - ?~ t.t.q.tub + ?. =(i.q.tub ']') + (fail tub) + ?~ t.q.tub + (fail tub) + ?: =(i.t.q.tub '-') + ?~ t.t.q.tub + (fail tub) + ?: =(i.t.t.q.tub ']') + (;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub) + (fail tub) + (;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub) + |= tub=nail + ?~ q.tub + (fail tub) + ?. =(i.q.tub '-') + (fail tub) + ?~ t.q.tub + (fail tub) + ?: =(i.t.q.tub '-') + ?~ t.t.q.tub + (fail tub) + ?: =(i.t.t.q.tub ']') + (;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub) + (fail tub) + (;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub) + (cook |=(a=[@ @] (con a)) ;~(plug seap sade)) + == + :: + ++ sade + %+ knee *@ |. ~+ + ;~ pose + (cold (bex '-') (jest '-]')) + (cold 0 ser) + (cook |=([p=@ q=@] `@`(con p q)) ;~(plug seap sade)) + == + :: + ++ seap + %+ knee *@ |. ~+ + ;~ pose + unid + %+ ifix (jest '[:')^(jest ':]') + ;~(pose ;~(pfix ket (cook flap chas)) chas) + %+ sear |=([a=@ b=@] ?:((gth a b) ~ (some (ranc a b)))) + ;~(plug asp ;~(pfix hep alb)) + |= tub=nail + ?~ q.tub + (fail tub) + ?~ t.q.tub + ((cook bex les) tub) + ?: =(i.t.q.tub '-') + ?~ t.t.q.tub + ((cook bex les) tub) + ?: =(i.t.t.q.tub ']') + ((cook bex les) tub) (fail tub) - ?: =(i.t.t.q.tub ']') - (;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub) - (fail tub) - (;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub) - (cook |=(a=[@ @] (con a)) ;~(plug seap sade)) - == -:: -++ sade - %+ knee *@ |. ~+ - ;~ pose - (cold (bex '-') (jest '-]')) - (cold 0 ser) - (cook |=([p=@ q=@] `@`(con p q)) ;~(plug seap sade)) - == -:: -++ seap - %+ knee *@ |. ~+ - ;~ pose - unid - (cold lower (jest '[:lower:]')) - (cold upper (jest '[:upper:]')) - (cold digit (jest '[:digit:]')) - (cold print (jest '[:print:]')) - (cold graph (jest '[:graph:]')) - (cold blank (jest '[:blank:]')) - (cold space (jest '[:space:]')) - (cold cntrl (jest '[:cntrl:]')) - (cold alpha (jest '[:alpha:]')) - (cold xdigit (jest '[:xdigit:]')) - (cold alnum (jest '[:alnum:]')) - (cold punct (jest '[:punct:]')) - (cold (flap lower) (jest '[:^lower:]')) - (cold (flap upper) (jest '[:^upper:]')) - (cold (flap digit) (jest '[:^digit:]')) - (cold (flap print) (jest '[:^print:]')) - (cold (flap graph) (jest '[:^graph:]')) - (cold (flap blank) (jest '[:^blank:]')) - (cold (flap space) (jest '[:^space:]')) - (cold (flap cntrl) (jest '[:^cntrl:]')) - (cold (flap alpha) (jest '[:^alpha:]')) - (cold (flap xdigit) (jest '[:^xdigit:]')) - (cold (flap alnum) (jest '[:^alnum:]')) - (cold (flap punct) (jest '[:^punct:]')) - %+ sear |=([a=@ b=@] ?:((gth a b) ~ (some (ranc a b)))) - ;~(plug alm ;~(pfix hep alb)) - |= tub=nail - ?~ q.tub - (fail tub) - ?~ t.q.tub ((cook bex les) tub) - ?: =(i.t.q.tub '-') - ?~ t.t.q.tub - ((cook bex les) tub) - ?: =(i.t.t.q.tub ']') - ((cook bex les) tub) - (fail tub) - ((cook bex les) tub) - ;~(pfix bas escd) - == + ;~(pfix bas escd) + == + :: + ++ cape + %+ knee *tape |. ~+ + ;~ pose + (cold ~ (jest '\\E')) + ;~(plug next cape) + (cook |=(a=char (tape [a ~])) next) + (full (easy ~)) + == + ++ chas :: ascii character set + =- (sear ~(get by -) sym) + %- mo ^- (list ,[@tas @I]) + :~ alnum/alnum alpha/alpha ascii/ascii blank/blank cntrl/cntrl + digit/digit graph/graph lower/lower print/print punct/punct + space/space upper/upper word/wordc xdigit/xdigit + == + :: Character sets + ++ alnum :(con lower upper digit) + ++ alpha :(con lower upper) + ++ ascii (ranc 0 127) + ++ blank (con (bex 32) (bex 9)) + ++ cntrl :(con (ranc 0 31) (bex 127)) + ++ digit (ranc '0' '9') + ++ graph (ranc 33 126) + ++ lower (ranc 'a' 'z') + ++ print (ranc 32 126) + ++ punct ;: con + (ranc '!' '/') + (ranc ':' '@') + (ranc '[' '`') + (ranc '{' '~') + == + ++ space :(con (ranc 9 13) (bex ' ')) + ++ upper (ranc 'A' 'Z') + ++ white :(con (bex ' ') (ranc 9 10) (ranc 12 13)) + ++ wordc :(con digit lower upper (bex '_')) + ++ xdigit :(con (ranc 'a' 'f') (ranc 'A' 'F') digit) + :: + ++ chad + %+ knee *rege |. ~+ + ;~(pose (stag %lite nor) (stag %brac unid) ;~(pfix bas escp)) + :: + ++ escd + %+ knee *@ |. ~+ + ;~ pose + (cold (bex 7) (just 'a')) + (cold (bex 9) (just 't')) + (cold (bex 10) (just 'n')) + (cold (bex 11) (just 'v')) + (cold (bex 12) (just 'f')) + (cold (bex 13) (just 'r')) + (cold (bex 0) (just '0')) + (sear |=(a=@ ?:((lth a 256) (some (bex a)) ~)) (bass 8 (stun [2 3] cit))) + (cook bex ;~(pfix (just 'x') (bass 16 (stun [2 2] hit)))) + (cook bex (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit)))) + (cook bex mis) + == + :: + ++ escp + %+ knee *rege |. ~+ + ;~ pose + (cold %empt (just 'Q')) + (cold [%lite `@tD`0] (just '0')) + (cold [%lite `@tD`7] (just 'a')) + (cold [%lite `@tD`9] (just 't')) + (cold [%lite `@tD`10] (just 'n')) + (cold [%lite `@tD`11] (just 'v')) + (cold [%lite `@tD`12] (just 'f')) + (cold [%lite `@tD`13] (just 'r')) + (sear |=(a=@ ?:((lth a 256) (some [%lite a]) ~)) (bass 8 (stun [2 3] cit))) + (stag %lite ;~(pfix (just 'x') (bass 16 (stun [2 2] hit)))) + (stag %lite (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit)))) + (cold %dote (just 'C')) + (cold %sart (just 'A')) + (cold %ende (just 'z')) + (cold %boun (just 'b')) + (cold %bout (just 'B')) + (stag %brac (cold wordc (just 'w'))) + (stag %brac (cold (flap wordc) (just 'W'))) + (stag %lite mis) + == + :: + ++ unid + %+ knee *@ |. ~+ + ;~ pose + (cold digit (jest '\\d')) + (cold (flap digit) (jest '\\D')) + (cold white (jest '\\s')) + (cold (flap white) (jest '\\S')) + (cold wordc (jest '\\w')) + (cold (flap wordc) (jest '\\W')) + == + -- :: -++ cape - %+ knee *tape |. ~+ - ;~ pose - (cold ~ (jest '\\E')) - ;~(plug next cape) - (cook |=(a=char (tape [a ~])) next) - (full (easy ~)) - == -:: -++ lower (ranc 'a' 'z') -++ upper (ranc 'A' 'Z') -++ digit (ranc '0' '9') -++ print (ranc 32 126) -++ graph (ranc 33 126) -++ blank (con (bex 32) (bex 9)) -++ space :(con (ranc 9 13) (bex ' ')) -++ cntrl :(con (ranc 0 31) (bex 127)) -++ alpha :(con lower upper) -++ alnum :(con lower upper digit) -++ punct ;: con - (ranc '!' '/') - (ranc ':' '@') - (ranc '[' '`') - (ranc '{' '~') - == -++ wordc :(con digit lower upper (bex 95)) -++ white :(con (bex ' ') (ranc 9 10) (ranc 12 13)) -++ xdigit :(con (ranc 'a' 'f') (ranc 'A' 'F') digit) -:: -++ chad - %+ knee *rege |. ~+ - ;~(pose (stag %lite nor) (stag %brac unid) ;~(pfix bas escp)) -:: -++ escd - %+ knee *@ |. ~+ - ;~ pose - (cold (bex 7) (just 'a')) - (cold (bex 9) (just 't')) - (cold (bex 10) (just 'n')) - (cold (bex 11) (just 'v')) - (cold (bex 12) (just 'f')) - (cold (bex 13) (just 'r')) - (cold (bex 0) (just '0')) - (sear |=(a=@ ?:((lth a 256) (some (bex a)) ~)) (bass 8 (stun [2 3] cit))) - (cook bex ;~(pfix (just 'x') (bass 16 (stun [2 2] hit)))) - (cook bex (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit)))) - (cook bex mis) - == -:: -++ escp - %+ knee *rege |. ~+ - ;~ pose - (cold %empt (just 'Q')) - (cold [%lite `@tD`0] (just '0')) - (cold [%lite `@tD`7] (just 'a')) - (cold [%lite `@tD`9] (just 't')) - (cold [%lite `@tD`10] (just 'n')) - (cold [%lite `@tD`11] (just 'v')) - (cold [%lite `@tD`12] (just 'f')) - (cold [%lite `@tD`13] (just 'r')) - (sear |=(a=@ ?:((lth a 256) (some [%lite a]) ~)) (bass 8 (stun [2 3] cit))) - (stag %lite ;~(pfix (just 'x') (bass 16 (stun [2 2] hit)))) - (stag %lite (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit)))) - (cold %dote (just 'C')) - (cold %sart (just 'A')) - (cold %ende (just 'z')) - (cold %boun (just 'b')) - (cold %bout (just 'B')) - (stag %brac (cold wordc (just 'w'))) - (stag %brac (cold (flap wordc) (just 'W'))) - (stag %lite mis) - == -:: -++ unid - %+ knee *@ |. ~+ - ;~ pose - (cold digit (jest '\\d')) - (cold (flap digit) (jest '\\D')) - (cold white (jest '\\s')) - (cold (flap white) (jest '\\S')) - (cold wordc (jest '\\w')) - (cold (flap wordc) (jest '\\W')) - == -:: -++ proc :: capture numbering - |= [a=rege b=@] - ^- [@ rege] - ?- a - [%capt *] =+ foo=$(a p.a, b +(b)) - [-.foo [%capt +.foo b]] - [%eith *] =+ foo=$(a p.a) - =+ bar=$(a q.a, b -.foo) - [-.bar [%eith +.foo +.bar]] - [%pair *] =+ foo=$(a p.a) - =+ bar=$(a q.a, b -.foo) - [-.bar [%pair +.foo +.bar]] - [%manl *] =+ foo=$(a p.a) - [-.foo [%manl +.foo]] - [%plll *] =+ foo=$(a p.a) - [-.foo [%plll +.foo]] - [%binl *] =+ foo=$(a p.a) - [-.foo [%binl +.foo q.a]] - [%betl *] =+ foo=$(a p.a) - [-.foo [%betl +.foo q.a r.a]] - [%mant *] =+ foo=$(a p.a) - [-.foo [%mant +.foo]] - [%plls *] =+ foo=$(a p.a) - [-.foo [%plls +.foo]] - [%bant *] =+ foo=$(a p.a) - [-.foo [%bant +.foo q.a]] - [%bint *] =+ foo=$(a p.a) - [-.foo [%bint +.foo q.a]] - [%betw *] =+ foo=$(a p.a) - [-.foo [%betw +.foo q.a r.a]] - * [b a] - == -:: -++ cont - |= [a=(map ,@u tape) b=(map ,@u tape)] - (~(gas by _(map ,@u tape)) (weld (~(tap by a)) (~(tap by b)))) -:: -++ abor - |= [a=char b=(unit ,[tape (map ,@u tape)])] - ^- (unit ,[tape (map ,@u tape)]) - ?~ b +++ ra :: regex engine + |_ a=rege + ++ proc :: capture numbering + |= b=@ + =- -(+ +>.$(a a)) + ^- [p=@ a=rege] + ?- a + [%capt *] =+ foo=$(a p.a, b +(b)) + [p.foo [%capt a.foo b]] + [%eith *] =+ foo=$(a p.a) + =+ bar=$(a q.a, b p.foo) + [p.bar [%eith a.foo a.bar]] + [%pair *] =+ foo=$(a p.a) + =+ bar=$(a q.a, b p.foo) + [p.bar [%pair a.foo a.bar]] + [%manl *] =+ foo=$(a p.a) + [p.foo [%manl a.foo]] + [%plll *] =+ foo=$(a p.a) + [p.foo [%plll a.foo]] + [%binl *] =+ foo=$(a p.a) + [p.foo [%binl a.foo q.a]] + [%betl *] =+ foo=$(a p.a) + [p.foo [%betl a.foo q.a r.a]] + [%mant *] =+ foo=$(a p.a) + [p.foo [%mant a.foo]] + [%plls *] =+ foo=$(a p.a) + [p.foo [%plls a.foo]] + [%bant *] =+ foo=$(a p.a) + [p.foo [%bant a.foo q.a]] + [%bint *] =+ foo=$(a p.a) + [p.foo [%bint a.foo q.a]] + [%betw *] =+ foo=$(a p.a) + [p.foo [%betw a.foo q.a r.a]] + * [b a] + == + :: + ++ cont + |= [a=(map ,@u tape) b=(map ,@u tape)] + (~(gas by _(map ,@u tape)) (weld (~(tap by a)) (~(tap by b)))) + :: + ++ abor + |= [a=char b=(unit ,[tape (map ,@u tape)])] + ^- (unit ,[tape (map ,@u tape)]) + ?~ b + b + [~ [[a -.u.b] +.u.b]] + :: + ++ matc + |= [b=tape c=tape] + ^- (unit (map ,@u tape)) + =+ foo=`(unit ,[tape (map ,@u tape)])`(deep b %empt c) + (bind foo |*(a=^ (~(put by +.a) 0 -.a))) + :: + ++ chet + |= [b=(unit ,[tape (map ,@u tape)]) c=tape d=tape] + ^- (unit ,[tape (map ,@u tape)]) + ?~ b + b + ?~ -.u.b + b + =+ bar=(deep (slag (lent -.u.b) c) %empt d) + ?~ bar + bar b - [~ [[a -.u.b] +.u.b]] -:: -++ matc - |= [a=rege b=tape c=tape] - ^- (unit (map ,@u tape)) - =+ foo=`(unit ,[tape (map ,@u tape)])`(deep a b %empt c) - (bind foo |*(a=^ (~(put by +.a) 0 -.a))) -:: -++ chet - |= [a=(unit ,[tape (map ,@u tape)]) b=rege c=tape d=tape] - ^- (unit ,[tape (map ,@u tape)]) - ?~ a - a - =+ ft=u.a - ?~ -.ft - a - =+ bar=(deep b (slag (lent -.ft) c) %empt d) - ?~ bar - bar - a -++ blak (some ["" _(map ,@u tape)]) -++ deep - |= [a=rege b=tape c=rege d=tape] - ^- (unit ,[tape (map ,@u tape)]) - ?- a - %dote ?~(b ~ (some [[i.b ~] _(map ,@u tape)])) - %ende ?~(b blak ~) - %sart ?:(=(b d) blak ~) - %empt blak - %boun =+ ^= luc - ?: =(b d) - & - =+ foo=(slag (dec (sub (lent d) (lent b))) d) - =((dis wordc (bex -.foo)) 0) - =+ cuc=?~(b & =((dis wordc (bex -.b)) 0)) - ?:(!=(luc cuc) blak ~) - %bout =+ ^= luc - ?: =(b d) - & - =+ foo=(slag (dec (sub (lent d) (lent b))) d) - =((dis wordc (bex -.foo)) 0) - =+ cuc=?~(b & =((dis wordc (bex -.b)) 0)) - ?:(=(luc cuc) blak ~) - [%capt *] =+ foo=$(a p.a) - ?~ foo - foo - =+ ft=u.foo - =+ bar=$(a c, b (slag (lent -.ft) b), c %empt) - ?~ bar - bar - [~ [-.ft (~(put by +.ft) q.a -.ft)]] - [%lite *] ?~(b ~ ?:(=(i.b p.a) (some [[i.b ~] _(map ,@u tape)]) ~)) - [%brac *] ?~ b + ++ blak (some ["" _(map ,@u tape)]) + ++ word |=(a=char =((dis wordc:rags (bex a)) 0)) + ++ deep + |= [b=tape c=rege d=tape] + ^- (unit ,[tape (map ,@u tape)]) + ?- a + %dote ?~(b ~ (some [[i.b ~] _(map ,@u tape)])) + %ende ?~(b blak ~) + %sart ?:(=(b d) blak ~) + %empt blak + %boun =+ ^= luc + ?: =(b d) + & + =+ foo=(slag (dec (sub (lent d) (lent b))) d) + (word -.foo) + =+ cuc=?~(b & (word -.b)) + ?:(!=(luc cuc) blak ~) + %bout =+ ^= luc + ?: =(b d) + & + =+ foo=(slag (dec (sub (lent d) (lent b))) d) + (word -.foo) + =+ cuc=?~(b & (word -.b)) + ?:(=(luc cuc) blak ~) + [%capt *] =+ foo=$(a p.a) + ?~ foo + foo + =+ ft=u.foo + =+ bar=$(a c, b (slag (lent -.ft) b), c %empt) + ?~ bar + bar + [~ [-.ft (~(put by +.ft) q.a -.ft)]] + [%lite *] ?~(b ~ ?:(=(i.b p.a) (some [[i.b ~] _(map ,@u tape)]) ~)) + [%brac *] ?~ b + ~ + ?. =((dis (bex `@`i.b) p.a) 0) + (some [[i.b ~] _(map ,@u tape)]) ~ - ?. =((dis (bex `@`i.b) p.a) 0) - (some [[i.b ~] _(map ,@u tape)]) - ~ - [%eith *] =+ foo=(chet $(a p.a) c b d) - =+ bar=(chet $(a q.a) c b d) - ?~ foo + [%eith *] =+ foo=(chet(a c) $(a p.a) b d) + =+ bar=(chet(a c) $(a q.a) b d) + ?~ foo + bar + ?~ bar + foo + =+ ft=u.foo + =+ bt=u.bar + ?: (gte (lent -.ft) (lent -.bt)) + foo bar - ?~ bar - foo - =+ ft=u.foo - =+ bt=u.bar - ?: (gte (lent -.ft) (lent -.bt)) - foo - bar - [%pair *] =+ foo=$(a p.a, c [%pair q.a c]) - ?~ foo - foo - =+ ft=u.foo - =+ bar=$(a q.a, b (slag (lent -.ft) b)) - ?~ bar - bar - =+ bt=u.bar - [~ [(weld -.ft -.bt) (cont +.ft +.bt)]] - [%manl *] =+ foo=$(a p.a) - ?~ foo - blak - ?~ -.u.foo - blak - $(a [%eith %empt [%pair p.a [%eith %empt a]]]) - [%mant *] =+ foo=$(a p.a) - ?~ foo - blak - =+ ft=u.foo - ?~ -.ft - blak - $(a [%eith [%pair p.a [%eith a %empt]] %empt]) - [%plls *] $(a [%pair p.a [%mant p.a]]) - [%plll *] $(a [%pair p.a [%manl p.a]]) - [%binl *] =+ min=?:(=(q.a 0) 0 (dec q.a)) - ?: =(q.a 0) - $(a [%manl p.a]) - $(a [%pair p.a [%binl p.a min]]) - [%bant *] ?: =(0 q.a) - blak - $(a [%pair p.a [%bant p.a (dec q.a)]]) - [%bint *] =+ min=?:(=(q.a 0) 0 (dec q.a)) - ?: =(q.a 0) - $(a [%mant p.a]) - $(a [%pair p.a [%bint p.a min]]) - [%betw *] ?: =(0 r.a) - blak - ?: =(q.a 0) - $(a [%eith [%pair p.a [%betw p.a 0 (dec r.a)]] %empt]) - $(a [%pair p.a [%betw p.a (dec q.a) (dec r.a)]]) - [%betl *] ?: =(0 r.a) - blak - ?: =(q.a 0) - $(a [%eith %empt [%pair p.a [%betl p.a 0 (dec r.a)]]]) - $(a [%pair p.a [%betl p.a (dec q.a) (dec r.a)]]) - == + [%pair *] =+ foo=$(a p.a, c [%pair q.a c]) + ?~ foo + foo + =+ ft=u.foo + =+ bar=$(a q.a, b (slag (lent -.ft) b)) + ?~ bar + bar + =+ bt=u.bar + [~ [(weld -.ft -.bt) (cont +.ft +.bt)]] + [%manl *] =+ foo=$(a p.a) + ?~ foo + blak + ?~ -.u.foo + blak + $(a [%eith %empt [%pair p.a [%eith %empt a]]]) + [%mant *] =+ foo=$(a p.a) + ?~ foo + blak + =+ ft=u.foo + ?~ -.ft + blak + $(a [%eith [%pair p.a [%eith a %empt]] %empt]) + [%plls *] $(a [%pair p.a [%mant p.a]]) + [%plll *] $(a [%pair p.a [%manl p.a]]) + [%binl *] =+ min=?:(=(q.a 0) 0 (dec q.a)) + ?: =(q.a 0) + $(a [%manl p.a]) + $(a [%pair p.a [%binl p.a min]]) + [%bant *] ?: =(0 q.a) + blak + $(a [%pair p.a [%bant p.a (dec q.a)]]) + [%bint *] =+ min=?:(=(q.a 0) 0 (dec q.a)) + ?: =(q.a 0) + $(a [%mant p.a]) + $(a [%pair p.a [%bint p.a min]]) + [%betw *] ?: =(0 r.a) + blak + ?: =(q.a 0) + $(a [%eith [%pair p.a [%betw p.a 0 (dec r.a)]] %empt]) + $(a [%pair p.a [%betw p.a (dec q.a) (dec r.a)]]) + [%betl *] ?: =(0 r.a) + blak + ?: =(q.a 0) + $(a [%eith %empt [%pair p.a [%betl p.a 0 (dec r.a)]]]) + $(a [%pair p.a [%betl p.a (dec q.a) (dec r.a)]]) + == + -- :: ++ rexp :: Regex match ~/ %rexp @@ -4116,15 +4099,15 @@ $(a (dec a)) =+ par=(pars a) ?~ par ~ - =+ poc=(proc u.par 1) + =+ poc=(~(proc ra u.par) 1) =+ c=b |- - =+ foo=(matc +.poc c b) + =+ foo=(matc:poc c b) ?~ foo ?~ c [~ ~] $(c t.c) - [~ [~ (bar (dec -.poc) u.foo)]] + [~ [~ (bar (dec p.poc) u.foo)]] :: ++ repg :: Global regex replace ~/ %repg @@ -4132,12 +4115,12 @@ ^- (unit tape) =+ par=(pars a) ?~ par ~ - =+ poc=(proc u.par 1) + =+ poc=(~(proc ra u.par) 1) =+ d=b :- ~ |- ^- tape - =+ foo=(matc +.poc d b) + =+ foo=(matc:poc d b) ?~ foo ?~ d ~ @@ -9603,7 +9586,7 @@ ++ sled $+ [(unit (set monk)) term beam] :: namespace function (unit (unit cage)) :: ++ slut $+(* (unit (unit))) :: old namespace -++ vile :: reflexive constants +++ vile :: reflexive constants $: typ=type :: -:!>(*type) duc=type :: -:!>(*duct) pah=type :: -:!>(*path)