aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-27 13:12:42 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-27 13:12:42 -0400
commit7987c2e3f254e5048482be6878936b4a62dee842 (patch)
treebbe926172e8e510285a7227a5be34bbe789f6bea
parent78fb79f234c9ab1dff63ad3645945a54404792df (diff)
Full lexical scoping
-rwxr-xr-xc.bqn45
1 files changed, 27 insertions, 18 deletions
diff --git a/c.bqn b/c.bqn
index e09ff4e5..0dd3c773 100755
--- a/c.bqn
+++ b/c.bqn
@@ -153,14 +153,30 @@ DParse ← {nv‿r𝕊𝕩:
g⊏˜↩⍋g⊏sl⋄r×↩¬sa⋄o←p>0
r+↩(sa<𝕩=1⊑bB)(⊣∧¬⊸∨=○(⌈`(1+↕∘≠)⊸×)⊢)(¯1⊸⌽⌾(g⊸⊏)3=r)∨1≤r
rev←⍋+`1+¯1↓g((¯1∾⊣)(⊣⍋⊸⊏⊏˜-⊏˜⟜⍋)⟜⍋1(+`∘∾-∾˜)⊏)o∨sl∨𝕩∊bS
- rev⊏˜↩⍋{+`⌾((⍋+`𝕩)⊸⊏)𝕩>0}rev⊏br
- bv←rev⊏br⋄b←/be←bv<0
- H←<˝∘⍉2↕(1∾˜bv>0)/·+`0∾˜(rev⊏𝕩)∊(5⊑bI)+⊢
- ft←0∾(H↕3)+2×(H⥊3)⌈2×H⥊4
- r↩((1↓ft)⊏(1+2⊸≤)⊸/↕4)⌾((be/rev)⊸⊏)r
- g↩⍋+`rev⊏p-br⋄gr←g⊏rev⋄sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/gr⊏𝕩=5⊑bB
- g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄𝕩⊏˜↩gr⋄r⊏˜↩gr⋄o⊏˜↩gr⋄si←/gr⊏sr>sl⋄b⊏↩⍋g⋄l⊏↩⍋gs
+ fg←⍋fd←+`pr←rev⊏br⋄fi←+`⌾(fg⊸⊏)pr>0
+ g↩⍋fi⋄rev⊏˜↩g⋄fi⊏˜↩g⋄fd⊏˜↩g
+ 𝕩⊏˜↩rev⋄bv←rev⊏br⋄b←/be←bv<0
+
+ FC←-⟜(≠↑0∾⊢)(1∾˜bv>0)/·+`∾⟜0
+ H←0<1↓·FC𝕩∊(5⊑bI)+⊢
+ ft←0∾(H↕3)+2×(H⥊3)⌈2×H⥊4
+ r↩((1↓ft)⊏(1+2⊸≤)⊸/↕4)⌾(b⊸⊏)rev⊏r
+
+ id←/(𝕩≥vi)∧𝕩<vi+nv⋄d←id⊏dec←¯1⌽𝕩=⊑bG⋄sp←/𝕩∊bI
+ pr⊏˜↩fg⋄fb←¯1∾fg/˜pr>0⋄fe←(≠𝕩)∾fg/˜pr<0
+ ig←⍋(⊏⟜fb∾d⊸/⊏fe˜)id⊏fi
+ ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾¯1⥊˜+´d))⊸⊏(⍋⊏⟜(∾⟜(d⊸/)id⊏𝕩))⊸⊏ig
+ ui←d(⌈`↕∘≠⊸×)⊸⊏⌾(ig⊸⊏)id
+ ip←1-˜ui⊏-⟜(⌈`(bv>0)⊸×)+`dec
+ ii←ip∾+⟜(0⊸≤)2+vi-˜sp⊏𝕩
+ ii+↩(ui∾sp)⊏(+`bv>0)⊏3×2|ft
+ idor←∾3⥊<is←id∾sp
+ idbc←⟨21+(is-1)⊏𝕩∊2↑bG,(id-○(⊏⟜fd)ui)∾0¨sp,ii⟩
+ lc←FC dec
+
+ g↩⍋+`rev⊏p-br⋄gr←g⊏rev⋄sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/g⊏𝕩=5⊑bB
+ g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄𝕩⊏˜↩g⋄r⊏˜↩g⋄o⊏˜↩gr⋄si←/gr⊏sr>sl⋄b⊏↩⍋g⋄l⊏↩⍋gs
s←𝕩∊bS⋄ps←s∨o∨gr⊏sl⋄a←𝕩∊2↑bG
r-↩ps∨a⋄op←r≥2⋄ro←op∨1⌽r=3
tr←(⌈`↕∘≠⊸ׯ1⌽ps)⊏ro∨r≥1
@@ -168,20 +184,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)∨ro<r=0
- n←𝕩≥vi+nv⋄id←/(n<𝕩≥vi)⋄sp←/𝕩∊bI⋄cn←/n∨𝕩≤¯1⊑bC⋄u←⍷ob←cn⊏𝕩
+ n←𝕩≥vi+nv⋄cn←/n∨𝕩≤¯1⊑bC⋄u←⍷ob←cn⊏𝕩
lo←(o/𝕩)=4⊑bB⋄ll←1+lo/1(↓--⊸↓)(o∾1)/+`(s∾0)-(1∾o)∧ps∾1
dr←/s>o+`⊸⊏0∾lo⋄rt←/𝕩=2⊑bB
- cf←g⊏+`bv>0
- dl←+`≠¨de←¯1↓(⊏⟜cf⊔○(∾⟜(1++´bv>0))⊏⟜𝕩)1+/𝕩=⊑bG
- fd←0∾(bv>0)/rev⊏+`br
- idf←dl⍋idl←de∾⊸⊐id⊏𝕩
- idd←(id⊏cf)-○(⊏⟜fd)idf
- idi←idl-idf⊏0∾dl
- is←id∾sp
- or←⍋g⊏˜∾⟨cn,cn,is,is,is,b,b,rt,1+/a,dr,l,l,si,si,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy⟩
- bc1←⟨0¨cn,u⊐ob,21+(is-1)⊏a,idd∾0¨sp,(idi∾+⟜(0⊸≤)2+vi-˜sp⊏𝕩)+3×2|(idf∾sp⊏cf)⊏ft,15¨b,1+↕≠b⟩
+ or←⍋idor∾g⊏˜∾⟨cn,cn,b,b,rt,1+/a,dr,l,l,si,si,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy⟩
+ bc1←idbc∾⟨0¨cn,u⊐ob,15¨b,1+↕≠b⟩
bc←or⊏∾bc1∾⟨25¨rt,12¨/a,14¨dr,3¨l,ll,3¨si,sll,5+oa⊏r,5+dy+4×fa⊏tr⟩
- ⟨LEBv bc,u,(ft⊏⥊"fmd"≍⌜⌽↕2)∾¨(((⥊¨•a↑˜≠)¨de)∾˜¨ft⊏spd)<∘≍˘˜/1∾or∊(+´≠¨bc1)+↕≠rt⟩
+ ⟨LEBv bc,u,(ft⊏⥊"fmd"≍⌜⌽↕2)∾¨(((⥊¨↑⟜•a)¨lc)∾˜¨ft⊏spd)<∘≍˘˜/1∾or∊(+´≠¨bc1)+↕≠rt⟩
}
prims←⟨