From ed5fbd5e72c3a20de4bb321a3923fc7e7e87a596 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sat, 5 Sep 2020 22:33:04 -0400 Subject: Merge JS and dbqn versions into UTF-16-independent (!) compiler --- c.bqn | 188 ++++++++---------------------------------------------------------- 1 file changed, 21 insertions(+), 167 deletions(-) (limited to 'c.bqn') diff --git a/c.bqn b/c.bqn index 5867d6bd..ae4f3cc5 100755 --- a/c.bqn +++ b/c.bqn @@ -1,67 +1,33 @@ #! ./dzref -nl←@+10 -charSet←∾charGroups←⟨ - chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function - "˙˜˘¨⌜⁼´˝`" # Modifier - "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition - nl∾"⋄," # Separator - "←↩→" # Gets - "(){}⟨⟩" # Bracket - "‿" # Ligature - "·" # nOthing - ¯1⊏˘∘‿2⥊"𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) - "@" # nUll character - '0'+↕10 # Digit - "¯.π∞" # Numeric - "_"∾˜⥊"aA"+⌜↕na←26 # Alphabetic - 1↑"𝕨" # Prefix for input (hack around UTF-16) - " "∾@+9 # Whitespace -# #'" eliminated during tokenization -⟩ -ErrUnknownChars←{ - "Unclosed quote"!¬∨´⟨''','"'⟩∊𝕩 - ⟨"Unknown character","s"/˜1<≠𝕩,": ",𝕩⟩∾⊸!0 -} -CharCode←charSet{ - Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) - g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ -} +i←"⟨charGroups,Tokenize,ReadNum,Compile⟩" +⟨charGroups,Tokenize,ReadNum,Compile⟩ ← ⟨•path∾"src/c.bqn",i⟩ •EX •path∾"dzref" + +chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" 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 -spc←⥊3‿5‿6-⌜3‿0 -Tokenize←{ - r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/dm←𝕩='"' - g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q - e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=nl)∾1⟩ - Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟{0=⊑⌽𝕩} - st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⍋e⋄b←st/q∾˘e - ToI←¯1↓·/⁼(≠𝕩)∾˜⥊ - f←¬≠`bm←ToI b⋄f∧↩¬qe←f∧bm∧(1↓0∾˜⊢)⊸∧dm - cb←(¬(st/q)⊏r)/b - lu←⍷lit←𝕩⊔˜1-˜(+`qe-˜ToI⊑˘cb)×≠`ToI cb - cl←f/ToI⊑∘⌽˘cb - c←cl-˜CharCode(⊑charSet)¨⌾(cl⊸/)f/𝕩 - w←(≠↑0∾⊢)⊸iu/ti - ti↩(us/˜(1↓0∾˜⊢)⊸,≠,=,≤,≥,≡,≢,⊣,⊢,⥊,∾,≍,↑,↓,↕,⌽,⍉,/,⍋,⍒,⊏,⊑,⊐,⊒,∊,⍷,⊔,! + ˙,˜,˘,¨,⌜,⁼,´,˝,` + ∘,○,⊸,⟜,⌾,⊘,◶,⎉,⚇,⍟ +⟩ +special←<˘∘‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘" +DRun←{ + ⟨bc,o,blk⟩ ← prims Compile 𝕩 + blk ↩ { + ⟨t,i,l,n⟩←𝕩 + s←(3×i)↓(t⊑3‿5‿6)↑special + ⟨t⊑"fmd",i,l,s∾⥊¨'a'+↕n-≠s⟩ + }¨blk + •COMP ⟨bc,o,⟨⟩,blk⟩ } + +# Targetting WebAssembly (very incomplete) WParse←{ a←𝕩M(2≍˜⊑bG)⋄at←1⌽a⋄𝕩/˜↩¬a⋄a/˜↩¬at l←≠𝕩⋄sep←𝕩M bS⋄𝕩↩(bF⊑⊸+⊑chF⊐<'⊣')¨⌾(sep⊸/)𝕩⋄sep∨↩𝕩=2+⊑bB @@ -78,17 +44,6 @@ Enc2←{2|⌊∘÷⟜2⍟(↕𝕨)𝕩} Hex←16 Base⟜⌽ (∾"0A"+⟜↕¨10‿6)⊸⊐ -ReadNum←{ - n‿d‿p‿i←4↕⊸+⊑bN # ¯.π∞ - Nat←+⟜(10⊸×)´∘⌽ -⟜(⊑bD) - Int←(n=⊑)◶⟨Nat,-·Nat 1⊸↓⟩ - Dec←⊐⟜(○≠◶⟨"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 - rev←⍋+`1+¯1↓g((¯1∾⊣)(⊣⍋⊸⊏⊏˜-⊏˜⟜⍋)⟜⍋1(+`∘∾-∾˜)⊏)o∨sl∨𝕩 M bS - - gf←⍋fd←+`rev⊏br - rev⊏˜↩gf⋄fd⊏˜↩gf - 𝕩⊏˜↩rev⋄bv←rev⊏br⋄b←/bv<0⋄fi←+`c←bv>0 - - 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 - - id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi⋄idx←id⊏𝕩⋄sp←/𝕩 M bI - ad←(⌈`↕∘≠⊸×𝕩 M bG)⊏𝕩=⊑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⋄𝕩⊏˜↩g⋄r⊏˜↩gr⋄o⊏˜↩gr⋄si←/gr⊏sr>sl - gi←⍋g⋄l⊏↩⍋gs - s←𝕩 M bS⋄ps←s∨o∨gr⊏sl⋄a←𝕩 M 2≍˜⊑bG - r-↩ps∨a⋄op←r≥2⋄fe←(r≥1)∨1⌽r=3 - 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 - tf←(a≤○(⌈`(1+↕∘≠)⊸×)ps)∧(⊢∧2(|<≤)ps(⊢-⌈`∘×)+`)¬ro - opa←op>1↓0∾˜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 - - 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 - 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⥊,≠,=,≤,≥,≡,≢,⊣,⊢,⥊,∾,≍,↑,↓,↕,⌽,⍉,/,⍋,⍒,⊏,⊑,⊐,⊒,∊,⍷,⊔,! - ˙,˜,˘,¨,⌜,⁼,´,˝,` - ∘,○,⊸,⟜,⌾,⊘,◶,⎉,⚇,⍟ -⟩ -special←<˘∘‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘" -DRun←{ - ⟨bc,o,blk⟩ ← prims Compile 𝕩 - blk ↩ { - ⟨t,i,l,n⟩←𝕩 - s←(3×i)↓(t⊑3‿5‿6)↑special - ⟨t⊑"fmd",i,l,s∾⥊¨'a'+↕n-≠s⟩ - }¨blk - •COMP ⟨bc,o,⟨⟩,blk⟩ -} -- cgit v1.2.3