aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-23 17:09:29 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-23 17:09:29 -0400
commit26c9a45538aafdcdfc5e1eabd0c17e3f746ebf82 (patch)
treed63fba0ec232acf9fb9d379e1597a2d6c194659d
parentb3b3ff6c79718925d4f8b26119da871dc51537ec (diff)
Support block functions and modifiers in the dzaima/BQN backend
-rwxr-xr-xc.bqn26
-rw-r--r--test/bcases.bqn6
2 files changed, 21 insertions, 11 deletions
diff --git a/c.bqn b/c.bqn
index bf154dbb..f0392f68 100755
--- a/c.bqn
+++ b/c.bqn
@@ -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