From 948f014a6b363e12477e4e957e0fa44c5ffd3451 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sun, 13 Sep 2020 16:06:14 -0400 Subject: =?UTF-8?q?Compiler=20support=20for=20and=20usage=20of=20=C2=AB?= =?UTF-8?q?=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/c.bqn | 36 ++++++++++++++++++------------------ src/cjs.bqn | 4 ++-- src/pr.bqn | 2 +- src/r.bqn | 7 +++++++ 4 files changed, 28 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 85bd532d..7695b427 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -1,6 +1,6 @@ lf←@+10 charSet‿cgl←(∾ ≍○< ≠¨)⟨ - "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function + "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function "˙˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition lf∾"⋄," # Separator @@ -23,40 +23,40 @@ CharCode←charSet{ Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ } -bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bD‿bN‿bA‿bW‿bP←≍¨˜⟜(+`≠↑0∾⊢)cgl +bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bD‿bN‿bA‿bW‿bP←≍¨˜⟜(+`»)cgl M←1⊸⊑(0⊸≤∧>)-⟜⊑ vi←⊑bD charRole←((⊑bI)↑/0∾3↑cgl)∾(5/⌽↕2)∾0 spc←⥊3‿5‿6-⌜3‿0 Tokenize←{ - r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧sm←𝕩='''⋄d←/dm←𝕩='"' + r←𝕩='#'⋄s←/0‿0⊸«⊸∧sm←𝕩='''⋄d←/dm←𝕩='"' g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q - e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=lf)∾1⟩ + e← g⊏∾⟨2+s⋄ 1↓d⋄-⟜»∘⊏⟜(0∾+`r)⊸//(𝕩=lf)∾1⟩ Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟{0=¯1⊑𝕩} st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⍋e⋄q/˜↩st⋄e/˜↩st n←≠𝕩⋄a←n↑/⁼q⋄b←n↑/⁼e - f←¬(≠`a∨b)∨1⌽qe←a∧(≠↑0∾⊢)⊸∧dm + f←¬(≠`a∨b)∨1⌽qe←a∧»⊸∧dm "Unclosed quote"!¬∨´(sm∨dm)∧bqe)×≠`dm∧a∨b lv←chr(⊣∾(1+¯1⌈´⊣)+⊢)○⊐str - UM←(≠↑¯1∾⌈`)⊸< + UM←(¯1»⌈`)⊸< lit←lv UM⊸/chr∾str - li←(ci∾/si)⊏+`(≠↑0∾⊢)f + li←(ci∾/si)⊏+`»f c←CharCode f/𝕩 - w←(≠↑0∾⊢)⊸iu⊏ti - ti↩(us/˜(1↓0∾˜⊢)⊸○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 @@ -103,7 +103,7 @@ Parse ← {nv‿r←𝕨 rev⊏˜↩gf⋄fd⊏˜↩gf 𝕩⊏˜↩rev⋄bv←rev⊏br⋄b←/bv<0⋄fi←+`c←bv>0 - FC←-⟜(≠↑0∾⊢)(c∾1)/·+`∾⟜0 + FC←-⟜»(c∾1)/·+`∾⟜0 H←0<1↓FC∘= ft←(0∾1⊸H+2×2⊸H⌈2×3⊸H)(0‿3‿4‿5+5+⊑bI)⍋𝕩 fsc←ft⊏spc @@ -121,11 +121,11 @@ Parse ← {nv‿r←𝕨 tr←(⌈`↕∘≠⊸ׯ1⌽ps)⊏fe ma←tr<(𝕩=1+⊑bG)∧1⌽fe ro←op∨a<1⌽r=3⋄os←⌽↕∘≠⊸(⊣-⌈`∘×)⌽¬ro∨ma⋄at←(⊢+1+⊏⟜os)/a - aa←g⊏asn←¯1⌽+`gi⊏-⟜(≠↑0∾⊢)¯1↓/⁼(≠𝕩)∾˜at-1⋄r↩¯1¨⌾(aa⊸/)r + aa←g⊏asn←¯1⌽+`gi⊏-⟜»¯1↓/⁼(≠𝕩)∾˜at-1⋄r↩¯1¨⌾(aa⊸/)r tf←(a≤○(⌈`(1+↕∘≠)⊸×)ps)∧(⊢∧2(|<≤)ps(⊢-⌈`∘×)+`)¬ro - opa←op>1↓0∾˜ps∨a + opa←op>«ps∨a oa←⌽/opa⋄fa←/(1⌽aa)<(tf∨¬tr)∧(ro∧1⌽opa)<(r=1)∨op<¯1⌽opa - dy←fa⊏1↓0∾˜(𝕩≠⊑bO)∧(tr∧r≥0)∨roo+`⊸⊏0∾lo⋄rt←/𝕩=2+⊑bB @@ -133,9 +133,9 @@ Parse ← {nv‿r←𝕨 d←id⊏dec←idm∧ad∧asn⋄lc←FC dec ixf←(⊏⟜(¯1∾c/gf)∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idx))⊸⊏⍋ixf - "Multiple definitions" ! 1∧´ixx∨○((≠↑0∾⊢)⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf + "Multiple definitions" ! 1∧´ixx∨○(»⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig - d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<(≠↑0∾⊢)⊸≠)ig⊏idx + d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<»⊸≠)ig⊏idx ui←(⌈`↕∘≠⊸×d)⊸⊏⌾(ig⊸⊏)id ii←(ui⊏(fi⊏fsc)-(⌈`c⊸×)⊸¬+`dec)∾((sp⊏fi)⊏3×2|ft)++⟜(0⊸≤)2+sp⊏xv idor←∾3⥊≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" + "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" "˙˜˘¨⌜⁼´˝`" "∘○⊸⟜⌾⊘◶⎉⚇⍟" ⟩ diff --git a/src/r.bqn b/src/r.bqn index 0800e83b..600bbe14 100644 --- a/src/r.bqn +++ b/src/r.bqn @@ -492,6 +492,13 @@ Find←{ ⊐ ← SelfClas ⊘ (1 _search) ∊ ← ⊢_self ⊘ (0 _search˜) +ShiftBefore ← {!𝕨1⊸⌊⊸≤○=𝕩 ⋄ ( ≠𝕩)↑𝕨∾𝕩} +ShiftAfter ← {!𝕨1⊸⌊⊸≤○=𝕩 ⋄ (-≠𝕩)↑𝕩∾𝕨} +Nudge ← (1↑0↑⊢)⊸ShiftBefore +NudgeBack ← (1↑0↑⊢)⊸ShiftAfter +» ← Nudge ⊘ ShiftBefore +« ← NudgeBack ⊘ ShiftAfter + ReorderChk←{ "𝕨⍉𝕩: 𝕨 must have rank at most 1" ! 1≥=𝕨 "𝕨⍉𝕩: Length of 𝕨 must not exceed rank of 𝕩" ! 𝕨≤○≠≢𝕩 -- cgit v1.2.3