From 30602c5a85a62fe983a9684d67ed0eecd9b405ae Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 1 Jul 2020 21:57:44 -0400 Subject: Add dzaima+reference version of the compiler --- c.bqn | 3 +- dc.bqn | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ spec/dzref | 4 +-- 3 files changed, 121 insertions(+), 4 deletions(-) create mode 100755 dc.bqn diff --git a/c.bqn b/c.bqn index bde12950..ef8427de 100755 --- a/c.bqn +++ b/c.bqn @@ -24,7 +24,7 @@ charSet←∾charGroups←⟨ " "∾tab ⍝ Whitespace ⍝ ⍝'" eliminated during tokenization ⟩ -bF‿bM‿bC‿bI‿bS‿bG‿bB‿bL‿bD‿bN‿bA‿bW←↕∘≠⌾∾charGroups +bF‿bM‿bC‿bI‿bS‿bG‿bB‿bL‿bD‿bN‿bA‿bW←⊔/≠¨charGroups vi←+´≠¨8↑charGroups Tokenize←{ @@ -88,7 +88,6 @@ GenFn←{ nd←+´c←t=3⊑bB t↩((vi+nVar+≠lits)+↕∘≠)⌾(c⊸/)t ⟨a,na⟩←Parse t - bB ops←⥊∾⟨ vi↑fntab ⍉3↑(Hex¨"20"‿"22")∾⌜↕nVar diff --git a/dc.bqn b/dc.bqn new file mode 100755 index 00000000..84167cf4 --- /dev/null +++ b/dc.bqn @@ -0,0 +1,118 @@ +⍝ Run with spec/dzref + +_ur_ ← {(𝕘/⊸∾↕≠𝕩) ⊑¨∘⊔ (𝔽𝕘/𝕩)∾𝕩} + +Base←{+⟜(𝕨⊸×)´⌽𝕩} +Enc2←{𝕨⥊2(|∾˜(𝕨-1)Enc2⌊∘÷˜)⍟(0<𝕨)𝕩} + +nl‿tab←•UCS 10‿9 +charSet←∾charGroups←⟨ + chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔" ⍝ Function + "˜˘¨⌜⁼´`" ⍝ Modifier + "∘○⊸⟜⌾⊘◶⎉⚇⍟" ⍝ Composition + "𝕨𝕎𝕩𝕏𝕗𝔽𝕘𝔾" ⍝ Input + nl∾"⋄," ⍝ Separator + "←↩→" ⍝ Gets + "(){}⟨⟩" ⍝ Bracket + "‿" ⍝ Ligature + •d ⍝ +⟜(↕10)⌾•UCS'0' ⍝ Digit + "¯.π∞" ⍝ Numeric + "_"∾' '(⊢∾+)⌾•UCS•a ⍝ Alphabetic + " "∾tab ⍝ Whitespace +⍝ ⍝'" eliminated during tokenization +⟩ +bF‿bM‿bC‿bI‿bS‿bG‿bB‿bL‿bD‿bN‿bA‿bW←⊔/≠¨charGroups +vi←+´≠¨8↑charGroups + +Tokenize←{ + r←𝕩='⍝'⋄s←/(≠↑2⊸↓)⊸∧𝕩=⊑"'"⋄d←/𝕩='"' + g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q + e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=nl)∾1⟩ + Se←{(⊏˜𝕨)Se𝕩∨(↕≠𝕩)∊𝕩/𝕨}⍟{0=⊑⌽𝕩} + st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⊸⍋¨e⋄b←st/q∾˘e + ToI←(≠𝕩)↑≠¨∘⊔∘⥊⋄f←¬≠`ToI b + cb←(¬(st/q)⊏r)/b + nl←≠lu←⍷lit←𝕩⊔˜1-˜(+`ToI⊑˘cb)×≠`ToI cb + cl←f/ToI⊑∘⌽˘cb + args←charSet⊸⊐¨𝕨⋄c←charSet⊐f/𝕩 + w←(≠↑0∾⊢)⊸⌜˜i←↕≠𝕩 + i⊐˜+´˘((2⥊≠𝕩)⥊𝔽⎉∞‿¯1⎉¯1‿∞˜𝕩)(⌈⟜0+=⟜0⊸×)>⌜˜i←↕≠𝕩 } _bins←{ r←1-˜≠≢𝕨 ! 0≤r LE←0≤𝔽⎉r - ! ∧´LE´˘2↕<˘𝕩 + ! (0<≠)◶⟨1,∧´·LE´˘2↕<˘⟩𝕩 +´𝕨LE⎉¯1‿∞𝕩 } -- cgit v1.2.3