diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-07-23 17:09:29 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-07-23 17:09:29 -0400 |
| commit | 26c9a45538aafdcdfc5e1eabd0c17e3f746ebf82 (patch) | |
| tree | d63fba0ec232acf9fb9d379e1597a2d6c194659d | |
| parent | b3b3ff6c79718925d4f8b26119da871dc51537ec (diff) | |
Support block functions and modifiers in the dzaima/BQN backend
| -rwxr-xr-x | c.bqn | 26 | ||||
| -rw-r--r-- | test/bcases.bqn | 6 |
2 files changed, 21 insertions, 11 deletions
@@ -5,12 +5,12 @@ charSet←∾charGroups←⟨ chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function "˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition - ¯1⊏˘10‿2⥊"𝕨𝕎𝕩𝕏𝕤𝕊𝕗𝔽𝕘𝔾" # Input (𝕣 pending; ℝ not allowed) nl∾"⋄," # Separator "←↩→" # Gets "(){}⟨⟩" # Bracket "‿" # Ligature "·" # nOthing + ¯1⊏˘10‿2⥊"𝕎𝕏𝕊𝔽𝔾𝕨𝕩𝕤𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) •d # +⟜(↕10)⌾•UCS'0' # Digit "¯.π∞" # Numeric "_"∾˜' '(+∾⊢)⌾•UCS•a # Alphabetic @@ -18,9 +18,9 @@ charSet←∾charGroups←⟨ " "∾tab # Whitespace # #'" eliminated during tokenization ⟩ -bF‿bM‿bC‿bI‿bS‿bG‿bB‿bL‿bO‿bD‿bN‿bA‿bP‿bW←⊔/≠¨charGroups +bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bD‿bN‿bA‿bP‿bW←⊔/≠¨charGroups vi←+´≠¨9↑charGroups -charRole←(vi+1)↑(/0∾≠¨3↑charGroups)∾10⥊↕2 +charRole←((vi-≠bI)↑/0∾≠¨3↑charGroups)∾(5/⌽↕2)∾0 Tokenize←{ r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/𝕩='"' @@ -44,6 +44,7 @@ Tokenize←{ c/˜↩¬(≠↑1∾(c∊2‿4⊏bB)∨⊢)⊸∧c∊bS⋄c/˜↩¬(1↓1∾˜c∊3‿5⊏bB)∧c∊bS ti←(us=¯1⊸⊑¨i)(⊢+∧⟜(2⊸=))0⌈na⌊∘÷˜(⊑bA)-˜⊑¨i t←ti⌾(((0⊸≤∧<⟜(≠id))c-vi)⊸/)(vi⌊c)⊏charRole + c+↩5×c∊5↑bI ⟨c,t,nv,(nv↓id)∾lu⟩ } @@ -144,7 +145,10 @@ DParse ← {nv‿r𝕊𝕩: r+↩(sa<𝕩=1⊑bB)(⊣∧¬⊸∨=○(⌈`(1+↕∘≠)⊸×)⊢)(¯1⊸⌽⌾(g⊸⊏)3=r)∨1≤r rev←⍋+`1+¯1↓g((¯1∾⊣)(⊣⍋⊸⊏⊏˜-⊏˜⟜⍋)⟜⍋1(+`∘∾-∾˜)⊏)o∨sl∨𝕩∊bS rev⊏˜↩⍋{+`⌾((⍋+`𝕩)⊸⊏)𝕩>0}rev⊏br - b←/rev⊏𝕩=3⊑bB + bv←rev⊏br⋄b←/be←bv<0 + H←<˝∘⍉2↕(be∾1)/·+`0∾˜(rev⊏𝕩)∊(5⊑bI)+⊢ + ft←(H↕3)+2×(H⥊3)⌈2×H⥊4 + r↩(ft⊏(1+2⊸≤)⊸/↕4)⌾((be/rev)⊸⊏)r g↩⍋+`rev⊏p-br⋄gr←g⊏rev⋄sll←1+2÷˜0(<-○/>)gr⊏sr-sl g⊏˜↩⍋gr⊏sl⋄gr↩g⊏rev⋄𝕩⊏˜↩gr⋄r⊏˜↩gr⋄o⊏˜↩gr⋄si←/gr⊏sr>sl⋄b⊏↩⍋g @@ -155,13 +159,13 @@ DParse ← {nv‿r𝕊𝕩: opa←op>1↓0∾˜ps∨a⋄os←⌽↕∘≠⊸(⊣-⌈`∘×)⌽¬ro oa←⌽/opa⋄fa←/(tf∨¬tr)∧(ro∧1⌽opa)<(r=1)∨op<¯1⌽opa dy←fa⊏1↓0∾˜(𝕩≠⊑bO)∧(tr∧r≥0)∨r=0 - n←𝕩≥vi+nv⋄id←/n<𝕩≥vi⋄cn←/n∨𝕩≤¯1⊑bC⋄u←⍷ob←cn⊏𝕩 + n←𝕩≥vi+nv⋄id←/(n<𝕩≥vi)∨𝕩∊bI⋄cn←/n∨𝕩≤¯1⊑bC⋄u←⍷ob←cn⊏𝕩 lo←(o/𝕩)=4⊑bB⋄l←/𝕩=5⊑bB⋄ll←1+lo/1(↓--⊸↓)(o∾1)/+`(s∾0)-(1∾o)∧ps∾1 dr←/s>o+`⊸⊏0∾lo⋄rt←/𝕩=2⊑bB - or←g⊏˜∾⟨cn,cn,id,id,b,b,rt,1+/a,dr,l,l,si,si,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy⟩ - bc←or⍋⊸⊏∾⟨0¨cn,u⊐ob,1+(id-1)⊏a,vi-˜id⊏𝕩,15¨b,1+↕≠b,25¨rt,(11-⊑bG)+a/𝕩 - 14¨dr,3¨l,ll,3¨si,sll,5+oa⊏r,5+dy+4×fa⊏tr⟩ - ⟨bc,u,/1∾bc=25⟩ + or←⍋g⊏˜∾⟨cn,cn,id,id,b,b,rt,1+/a,dr,l,l,si,si,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy⟩ + bc1←⟨0¨cn,u⊐ob,1+(id-1)⊏a,5+vi-˜id⊏𝕩,15¨b,1+↕≠b⟩ + bc←or⊏∾bc1∾⟨25¨rt,(11-⊑bG)+a/𝕩,14¨dr,3¨l,ll,3¨si,sll,5+oa⊏r,5+dy+4×fa⊏tr⟩ + ⟨bc,u,((0∾ft)⊏(2/"fmd")≍¨6⥊⌽↕2)∾¨/1∾or∊(+´≠¨bc1)+↕≠rt⟩ } prims←⟨ @@ -171,9 +175,9 @@ prims←⟨ ⟩ DGenFn←{ ⟨t,r,nVar,lits⟩←Tokenize𝕩 - ⟨bc,u,st⟩←nVar‿r DParse t + ⟨bc,u,blk⟩←nVar‿r DParse t o←(u-(vi+nVar-≠prims)×u≥vi)⊏prims∾LitVal¨lits - ⟨bc,o,nVar↑•a,'f'‿1⊸∾¨st⟩ + ⟨bc,o,(<˘5‿2⥊"𝕨𝕩𝕤𝕗𝕘")∾⥊¨nVar↑•a,blk⟩ } DRun←{ •COMP DGenFn 𝕩 diff --git a/test/bcases.bqn b/test/bcases.bqn index 5c4aed29..261e25a3 100644 --- a/test/bcases.bqn +++ b/test/bcases.bqn @@ -26,3 +26,9 @@ 1 % f←2⊑(ט)‿⍟‿(×-+)⋄2 F 3 0 % ≠⟨⟩ 1 % ⟨⟩≡0↑1‿2 +1 % {𝕩-1}2 +4 % {𝕩×𝕩}2 +3 % 2{𝕩÷𝕨}6 +1 % {q←𝕩⋄{(q∧q)+(𝕩∨𝕩)}¬q}÷4 +-1 % (⊑⟨×⟩){𝔽}¯2 +6 % +´(ט)‿-{𝕎𝕩}¨3 |
