From 11ba9341eaf65a0ac371e98e31fd66d889a9a518 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 8 Oct 2020 22:12:08 -0400 Subject: Extend assignment syntax to allow exports (but not imports) --- src/c.bqn | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 535a37e8..807e763a 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -4,7 +4,7 @@ charSet‿cgl←(∾ ≍○< ≠¨)⟨ "˙˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition lf∾"⋄," # Separator - "←↩" # Gets + "⇐←↩" # Gets "(){}⟨⟩" # Bracket "‿" # Ligature "·" # nOthing @@ -111,7 +111,8 @@ Parse ← {r‿nv←𝕨 "Swapped open and closed brackets" ! 0≤(⊑g)⊑pd "Parentheses can't contain separators" ! ¬∨´((⊑bB)⊸=/·«sep⊸=)gb/gx "Empty statement or expression" ! ∧´(4+⊑bB)=(1⊸«⊸∧1∾gb)/0∾gx - "Invalid assignment or stranding use" ! ∧´(r≤¯2)/r»⊸∧⟜«○(0⊸≤)r+p + r-↩(𝕩=⊑bG)>ec←«0≤r+p + "Invalid assignment or stranding use" ! ∧´((¯4⊸<∧≤⟜¯2)r)/ec∧»0≤r sr←»⌾(g⊸⊏)sl←«⊸∨r=¯2⋄cp←𝕩=1+⊑bB g⊏˜↩⍋g⊏sl rev←⍋+`¯1↓(¯1∾g)(⊣⍋⊸⊏⊏˜⟜⍋¬⊏˜)⍋+`⊸+1∾g⊏sl∨r=¯1 @@ -123,6 +124,8 @@ Parse ← {r‿nv←𝕨 H←¬1(∾/∾˜)c(∨/⊣)= sn←(0‿3‿4‿5+5+⊑bI)⍋𝕩⋄fx←1 H sn⋄fr←(fx∨0⊸<)⊸+ft←(2⊸H⌈2×3⊸H)sn "Special name outside of any block" ! 0=⊑fr + nf←(⊑bG)H𝕩 + "Can't export from a non-immediate block" ! ∧´nf≤fr=0 fsc←(ft⊏0‿2‿3)+3×fx pt←cp∧ns←¬sl∨sr r↩sl-˜ns×(1↓fr)⌾((b⊏rev)⊸⊏)r @@ -132,15 +135,15 @@ Parse ← {r‿nv←𝕨 r+↩pt×»ir id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi⋄idx←id⊏𝕩⋄sp←/𝕩 M bI - ad←𝕩(=>○IT⊣=1+⊢)⊑bG + ac←𝕩(IT∘M⊏-⟜⊑-(rev⊏¯4=r)˙)bG 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⋄gi←⍋g 𝕩⊏˜↩g⋄r⊏˜↩gr⋄ir⊏˜↩gr⋄si←/gr⊏sr>sl⋄l⊏↩⍋gs - a←r=¯3⋄ps←aax←ac<0⋄ix←id⊏ax + ixf←((ix+⊏⟜(¯1∾c/gf))∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idx))⊸⊏⍋ixf "Multiple definitions" ! 1∧´ixx∨○(»⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<»⊸≠)ig⊏idx ui←(IT d)⊸⊏⌾(ig⊸⊏)id - ii←(ui⊏(fi⊏fsc)-c⊸T⊸¬+`dec)∾((sp⊏fi)⊏3×fx)++⟜(0⊸≤)2+sp⊏xv + lc←(1«c)/dn←c(⊢-T)+`dec + ii←(ui⊏(fi⊏fsc)+dn-1)∾((sp⊏fi)⊏3×fx)++⟜(0⊸≤)2+sp⊏xv idor←∾3⥊