From 6bb849d6cfc00791acb72017ac0e7f7dea7bdc08 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sat, 5 Sep 2020 22:17:48 -0400 Subject: Align self-hosted compiler with dzaima/BQN one, except for UTF-16 hacks --- c.bqn | 99 +++++++++++++++++++++++++++++++++++++++---------------------- src/c.bqn | 2 +- src/cjs.bqn | 4 +-- test/t.js | 2 +- 4 files changed, 68 insertions(+), 39 deletions(-) diff --git a/c.bqn b/c.bqn index c7fa2d3d..5867d6bd 100755 --- a/c.bqn +++ b/c.bqn @@ -10,7 +10,7 @@ charSet←∾charGroups←⟨ "(){}⟨⟩" # Bracket "‿" # Ligature "·" # nOthing - ¯1⊏˘10‿2⥊"𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) + ¯1⊏˘∘‿2⥊"𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) "@" # nUll character '0'+↕10 # Digit "¯.π∞" # Numeric @@ -19,13 +19,20 @@ charSet←∾charGroups←⟨ " "∾@+9 # Whitespace # #'" eliminated during tokenization ⟩ +ErrUnknownChars←{ + "Unclosed quote"!¬∨´⟨''','"'⟩∊𝕩 + ⟨"Unknown character","s"/˜1<≠𝕩,": ",𝕩⟩∾⊸!0 +} +CharCode←charSet{ + Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) + g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ +} bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bU‿bD‿bN‿bA‿bP‿bW←≍¨˜⟜(+`≠↑0∾⊢)≠¨charGroups bA_e←4+⊑bA M←1⊸⊑(0⊸≤∧>)-⟜⊑ vi←+´≠¨9↑charGroups charRole←((vi-1⊑bI)↑/0∾≠¨3↑charGroups)∾(5/⌽↕2)∾0 -special←<˘6‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘" -spd←⥊⍉3‿0↓⌜↑⟜special⌜3‿5‿6 +spc←⥊3‿5‿6-⌜3‿0 Tokenize←{ r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/dm←𝕩='"' @@ -39,23 +46,23 @@ Tokenize←{ lu←⍷lit←𝕩⊔˜1-˜(+`qe-˜ToI⊑˘cb)×≠`ToI cb cl←f/ToI⊑∘⌽˘cb - c←charSet⊐f/𝕩 + c←cl-˜CharCode(⊑charSet)¨⌾(cl⊸/)f/𝕩 w←(≠↑0∾⊢)⊸iu/ti + ti↩(us/˜(1↓0∾˜⊢)⊸○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ + 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 +} +ErrUndeclared←{ + 0 !˜ "Undefined identifier"∾(1<≠𝕩)/"s" +} +Parse ← {nv‿r←𝕨 + g←⍋pd←+`p←𝕩(Mׯ1⋆2|-⟜⊑)bB⋄br←p×𝕩M 2≍˜2+⊑bB + p(=⟜1⊸/ErrMismatchedBrackets⍟≢1-˜=⟜¯1⊸/)○(g⊸⊏)𝕩 + "Swapped open and closed brackets" ! 0≤(⊑g)⊑pd sl←1⊸⌽⊸∨𝕩 M bL⋄sr←¯1⊸⌽⌾(g⊸⊏)sl⋄sa←sl∨sr g⊏˜↩⍋g⊏sl⋄r×↩¬sa⋄o←p>0 pt←sa<𝕩=1+⊑bB @@ -166,6 +184,7 @@ DParse ← {nv‿r𝕊𝕩: FC←-⟜(≠↑0∾⊢)(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 r↩((1↓ft)⊏(1+2⊸≤)⊸/↕4)⌾((b⊏rev)⊸⊏)r r+↩pt(⊣∧¬⊸∨=○(⌈`(1+↕∘≠)⊸×)⊢)(¯1⊸⌽⌾(g⊸⊏)3=r)∨1≤r @@ -190,10 +209,13 @@ DParse ← {nv‿r𝕊𝕩: dr←/s>o+`⊸⊏0∾lo⋄rt←/𝕩=2+⊑bB d←id⊏dec←idm∧ad∧asn⋄lc←FC dec - ig←⍋(⊏⟜(¯1∾c/gf)∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi - ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏(⍋⊏⟜(∾⟜(d⊸/)idx))⊸⊏ig - ui←d(⌈`↕∘≠⊸×)⊸⊏⌾(ig⊸⊏)id - ii←(ui⊏(fi⊏ft⊏≠¨spd)-(⌈`c⊸×)⊸¬+`dec)∾((sp⊏fi)⊏3×2|ft)++⟜(0⊸≤)2+sp⊏xv + ixf←(⊏⟜(¯1∾c/gf)∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi + ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idx))⊸⊏⍋ixf + "Multiple definitions" ! 1∧´ixx∨○((≠↑0∾⊢)⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf + ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig + d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<(≠↑0∾⊢)⊸≠)ig⊏idx + ui←(⌈`↕∘≠⊸×d)⊸⊏⌾(ig⊸⊏)id + ii←(ui⊏(fi⊏fsc)-(⌈`c⊸×)⊸¬+`dec)∾((sp⊏fi)⊏3×2|ft)++⟜(0⊸≤)2+sp⊏xv idor←∾3⥊○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 } diff --git a/src/cjs.bqn b/src/cjs.bqn index e936b4fd..2b26f65d 100755 --- a/src/cjs.bqn +++ b/src/cjs.bqn @@ -1,6 +1,6 @@ #! /usr/bin/env dbqn -compile ← ⟨•path∾"../c.bqn"⋄"DGenFn"⟩ •EX •path∾"../dzref" +compile ← ⟨•path∾"../c.bqn"⋄"Compile"⟩ •EX •path∾"../dzref" Comp ← ((<"runtime["∾⍕∾"]"˙)¨↕60)⊸Compile FP ← ∞⊸=◶⟨⍕,"Infinity"⟩ Esc ← (⟨"\t","\n","\r","\'"⟩∾<∘⥊)⊑˜("'"∾˜@+9‿10‿13)⊑∘⊐⊢ @@ -9,7 +9,7 @@ Char ← "'"(∾∾⊣)Esc Fconst ← ≡◶⟨(⊑⍋)∘(∾⟜∞)◶⟨0⊸≤◶⟨"-"∾FP∘|,FP⟩,Char⟩⋄Str⋄⊑⟩ L ← "["∾"]"∾˜1↓·∾","⊸∾⟜⍕¨ J ← ∾∾⟜(@+10)¨ -Fout ← ⟨L∾⟜25,L Fconst¨,L⟨⊑"fmd"⊸⊐,⊢,⊢,≠⟩⊸(L{𝕎𝕩}¨)¨⟩ {𝕎𝕩}¨ 0‿1‿3 ⊏ ⊢ +Fout ← ⟨⊢,Fconst,L⟩ {L𝕎¨𝕩}¨ ⊢ Frun ← ("provide.concat("∾∾⟜")")⌾(1⊸⊑) Fout Long ← ∾ (1‿2/⟨" new Uint8Array("∾∾⟜")"⋄((@+10)∾" ,")⊸∾⟩) {𝕎𝕩}¨ ⊢ • ← (⊑"r"‿"c"‿"fmt"⊐⊏)◶⟨ diff --git a/test/t.js b/test/t.js index 05ee2004..c11bcc01 100755 --- a/test/t.js +++ b/test/t.js @@ -11,7 +11,7 @@ const t=load('cases.bqn').split('\n').filter(x=>x).map(x=>x.split(' % ')) var compiler = execFile( __dirname+'/../cshim.bqn', - [ '{•←Compile𝕩}¨⟨'+test+'⟩' ], + [ '{•←WCompile𝕩}¨⟨'+test+'⟩' ], function (error, stdout, stderr) { const rslt=stdout.split('\n').filter(a=>a.length) .map(a=>runWasm(a.split("‿").map(n=>+n))) -- cgit v1.2.3