aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-09-16 22:57:56 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-09-17 10:31:56 -0400
commit6f2d2e6c57d24fc4445d0feb6233aa37f614e8b7 (patch)
tree6f39c1c1f1533bc48f19f0303a1b75142c429d11
parent8013cfa27c143e2a9abe6fe6f24e00d92396886d (diff)
Handle all deduplication together; move number evaluation into the tokenizer
-rw-r--r--src/c.bqn28
-rw-r--r--wc.bqn8
2 files changed, 18 insertions, 18 deletions
diff --git a/src/c.bqn b/src/c.bqn
index 4c0907d3..2bff6d27 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -42,23 +42,23 @@ Tokenize←{
u←f∧𝕩='@'⋄ci←/u∨»a∧sm
chr←(ci⊏𝕩)-(ci⊏u)×'@'-@
str←1↓¨𝕩⊔˜1-˜(+`si←dm∧a>qe)×≠`dm∧a∨b
- lv←chr(⊣∾(1+¯1⌈´⊣)+⊢)○⊐str
- lit←lv(⊢>¯1»⌈`)⊸/chr∾str
- li←(ci∾/si)⊏+`»f
c←CharCode f/𝕩
- w←»⊸<l←c M (⊑bD)≍+´1⊑¨bD‿bN‿bA
- us←c=¯1++´bA
- id←(1-˜(us<l)×+`w)⊔na(⊢-⊣×+⟜(⊑bA)⊸≤)c
- ti←na⌊∘÷˜(⊑bA)-˜w/c
- iu←/(⊢>¯1»⌈`)is←⊐id⋄ie←vi+≠in←0>iu⊏ti
- ti↩(us/˜«⊸<l)(⊢+∧⟜(2⊸=))0⌈ti
+ w←»⊸<l←c M bD(⊣≍-˜)○⊑bW⋄us←c=¯1++´bA
+ tw←na⌊∘÷˜(⊑bA)-˜w/c
+ c-↩na×l∧c≥na+⊑bA
+ li←l>in←l∧(+`w)⊏0∾tw<0
+ num←ReadNum¨¬⊸(+`⊸×-⊣)∘×⊸⊔ in∨⟜»⊸/c×l
+ ti←(us/˜«⊸<li)(⊢+∧⟜(2⊸=))0⊸≤⊸/tw
+ id←(1-˜(li>us)×+`w>in)⊔c
+ ki←((⍋⊏⟜in)⊸⊏/w)∾(ci∾/si)⊏+`»f
- c↩(w∨¬l∨c M bW)/(vi+is⊏⍋⍋in)⌾(w⊸/)(ie+lv)⌾(li⊸⊏)c
+ k←id‿num‿chr‿str⋄k(⊢>¯1»⌈`)⊸/¨˜↩j←⊐¨k
+ c↩(w∨¬l∨c M bW)/(∾j++`vi»≠¨k)⌾(ki⊸⊏)c
c/˜↩¬(1»(c∊2‿4+⊑bB)∨⊢)⊸∧c M bS⋄c/˜↩¬(1«c∊3‿5+⊑bB)∧c M bS
- ic←(vi⊸≤∧<⟜ie)c⋄t←ti⌾(ic⊸/)(vi⌊c)⊏charRole
+ t←ti⌾((c M vi∾≠⊑k)⊸/)(vi⌊c)⊏charRole
c+↩5×c M 5≍˜⊑bI
- ⟨c,t,+´¬in,(in/iu)⊏id,lit⟩
+ ⟨c,t,≠⊑k,∾1↓k⟩
}
ReadNum←{
@@ -149,8 +149,8 @@ Parse ← {nv‿r←𝕨
}
Compile←{
- ⟨t,r,nVar,nums,strs⟩←Tokenize𝕩
+ ⟨t,r,nVar,const⟩←Tokenize𝕩
⟨bc,u,blk⟩←nVar‿r Parse t
- o←(u-(vi+nVar-≠𝕨)×u≥vi)⊏∾⟨𝕨,ReadNum¨nums,strs⟩
+ o←(u-(vi+nVar-≠𝕨)×u≥vi)⊏𝕨∾const
⟨bc,o,blk⟩
}
diff --git a/wc.bqn b/wc.bqn
index b270c5d8..b99ce059 100644
--- a/wc.bqn
+++ b/wc.bqn
@@ -2,8 +2,8 @@
# WebAssembly backend (very incomplete)
-i←"⟨cgl,charSet,Tokenize,ReadNum⟩"
-⟨cgl,charSet,Tokenize,ReadNum⟩ ← ⟨•path∾"src/c.bqn",i⟩ •EX •path∾"dzref"
+i←"⟨cgl,charSet,Tokenize⟩"
+⟨cgl,charSet,Tokenize⟩ ← ⟨•path∾"src/c.bqn",i⟩ •EX •path∾"dzref"
chF←(⊑cgl)↑charSet
bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bU‿bD‿bN‿bA‿bW←≍¨˜⟜(+`≠↑0∾⊢)cgl
M←1⊸⊑(0⊸≤∧>)-⟜⊑
@@ -47,7 +47,7 @@ fntab←⍉(0¨tab1)∾tab1≍tab2
f64←127-3
GenFn←{
- ⟨t,r,nVar,lits,strs⟩←Tokenize𝕩
+ ⟨t,r,nVar,lits⟩←Tokenize𝕩
nLoc←nVar-𝕨⊢0
t⊏˜↩⍋+`-˝(2‿3+⊑bB)=⌜t
nd←+´c←t=3+⊑bB
@@ -56,7 +56,7 @@ GenFn←{
ops←⥊∾⟨
∾⟜(0⥊˜3∾˜vi-≠)fntab
⍉(Hex¨"20"‿"22"‿"21")∾⌜↕nVar
- ⊣⌜⟜(↕3)(GenF64∘ReadNum¨lits)∾(Hex"10")∾¨3+↕nd
+ ⊣⌜⟜(↕3)(GenF64¨lits)∾(Hex"10")∾¨3+↕nd
(((≠∾∾)⟨nLoc∾f64⟩)∾(Hex"0B")∾˜∾)¨((⊢-˜¬×+`)a=2+⊑bB)⊔(na+3×a)⊏ops
}