1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/usr/bin/env bqn
β This version of the compiler uses the old BQN prototype and is no
β longer in development. See c.bqn instead.
reduceβ{rβπ©β{(>π½Β¨_r)β (><βΈ(π½Β¨_r))}}ββ¨Β΄β©
Β΄β©_reduce
ββ©((β1+βΒ΄)=Β¨<)ββ£ /Β¨β< βββ β β’
β·β©βͺ
Baseβ{+β(π¨βΈΓ)Β΄β½π©}
Enc2β{π¨β₯2(|βΎΛ(π¨-1)Enc2ββΓ·Λ)β(0<π¨)π©}
lfβΏtabββ’UCS 10βΏ9
charSetββΎcharGroupsββ¨
chFβ"+-ΓΓ·ββββ|Β¬β§β¨<>β =β€β₯β‘β’β£β’β₯βΎβββββ½β/ββββββββ·β" β Function
"ΛΛΒ¨ββΌΒ΄`" β Modifier
"βββΈββΎββΆβββ" β Composition
"π¨ππ©πππ½ππΎ" β Input
lfβΎ"β," β 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)βΈ//(π©=lf)βΎ1β©
Seβ{(βΛπ¨)Se 1Β¨βΎ((π©/π¨)βΈβ)π©}β{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βΎβ’)lβcββΎbDβΏbNβΏbA
idββ·argsβΎ(bAβΛw/c)ββΈβiβ(1-ΛlΓ+`w)βc
nvβ+Β΄bAβΛβΒ¨id
cβ©(wβ¨Β¬lβ¨cβbW)/(vi+idβi)βΎ(wβΈ/)(vi+(β id)+luβlit)βΎ(clβΈ/)c
c(/Λ)β©Β¬(1βΎβ1β½1βΎβ)βΈβ§cβbS
β¨c,nv,nv-β args,(nvβid)βΎluβ©
}
Parseβ{
aβπ©β(2βbG)βatβ1β½aβπ©(/Λ)β©Β¬aβa(/Λ)β©Β¬at
lββ π©βsepβπ©βbSβπ©β©(bFβΛchFβ<'β£')Β¨βΎ(sepβΈ/)π©βsepβ¨β©π©=2βbB
oβπ©=0βbBβcβπ©=1βbBβvβa-Λπ©β₯viβfβΒ¬oβ¨cβ¨vβ¨sep
naβ(2Γsep)+fΓ1+lβ0βΎcβ¨v
dβ+`o-cβfeβ(+`βΎ((βd)βΈβ)o)βlβΎ(βββd)βΈβ/c
feββ©l-lβ(β`βββ βΈΓ)βΎβ½1βΎΛsep
selβΒ¬βββ(oβ¨c)βΈ/β((fΓfe)ββl)-+`f-lβ/βΌβ§f/fe
selβΈβΒ¨π©βΏna
}
Hexβ16 Base (β’dβΎ"ABCDEF")βΈβ
ReadNumβ10 Base bDβΈβ
GenF64β{
π©=0:8β₯0
lβ2(βββΌ)π©
(Hex"44")βΎ2 BaseΛβ½8βΏ8(β£β₯ΓΒ΄βΈβ)βΎβ¨β₯0,11 Enc2 1023+l,(0βl)Enc2π©β©
}
MakeTabβ{{(β chF)ββΒ¨(chFβπ¨)βπ©}ββΎβ(β₯Β¨ββ₯Β¨)Β΄<Λβ(2(Γ·ΛβΎβ£)β’)βΈβ₯π©}
tab1βMakeTabβ¨
"β£β’" , 2β₯<β¨β©
"|-βββ" , (Hex"99")+(β4)βΎ6
"Γ·" , <(Hex"10")βΎ0
"Β¬" , <βΎβ₯Β¨β¨Hex"9A",GenF64 1,Hex"A0"β©
β©
tab2βMakeTabβ¨
"β£" , Hex"1A"
"+-ΓΓ·βββ§", (Hex"A0")+(β6)βΎ2
"Β¬" , <βΎβ₯Β¨β¨Hex"A1",GenF64 1,Hex"A0"β©
"β¨" , <(Hex"10")βΎ1
β©
fntabββΒ―3βtab1βtab2
f64β127-3
GenFnβ{
β¨β©GenFnπ©;
β¨t,nVar,nLoc,litsβ©βπ¨Tokenizeπ©
t(βΛ)β©β+`-Β΄<Λ(2βΏ3βbB)=βt
ndβ+Β΄cβt=3βbB
tβ©((vi+nVar+β lits)+βββ )βΎ(cβΈ/)t
β¨a,naβ©βParse t
opsββ₯βΎβ¨
viβfntab
β3β(HexΒ¨"20"βΏ"22")βΎββnVar
β£ββ(β3)(GenF64βReadNumΒ¨lits)βΎ(Hex"10")βΎΒ¨3+βnd
β©
(((β βΎβΎ)β¨nLocβΎf64β©)βΎ(Hex"0B")βΎΛβΎ)Β¨((β’-ΛΒ¬Γ+`)a=2βbB)β(na+3Γa)βops
}
Genβ{
LEBβ{0β‘π©:β₯0β128βΈ+βΎ(Β―1βΈβ) 2 Base β½β (β¨`βΎβ½β¨Β΄Λ)βΈ/ 10βΏ7(β£β₯ΓΒ΄βΈβ) β½64 Enc2 π©}
CβLEBββ βΈβΎ
SββΎβC
Vββ βΎβΎ
IβCββ’UCS
tβΏnβΏbβπ©
βΎβ¨
0βΎ(β’UCS"asm")βΎ4β1
1 S V (96βΎββΎCΒ¨)Β¨t
3 S V β₯Β¨ββ b
7 S V β₯<"fn"IβΈ(β£βΎ0βΎβ’)n
10 S V C¨ b
β©
}
Compileβ{
bodyβGenFn π©
rcpββ¨"x"β© GenFn "1Γ·x"
orββ¨"w","x"β© GenFn "(w+x)-wβ§x"
fββ¨rcp,or,bodyβ©
Gen β¨(β Β¨f)/β¨1βΏ1,2βΏ1,0βΏ1β©/¨¨f64 β 2 β βΎfβ©
}
|