functionalscript 0.0.407 → 0.0.410

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/doc/fa.md +164 -0
  2. package/doc/vm.md +1 -1
  3. package/package.json +1 -1
package/doc/fa.md ADDED
@@ -0,0 +1,164 @@
1
+ # FA
2
+
3
+ F ::= A 'hello'
4
+ F ::= A 'help'
5
+
6
+ ## Classic FA
7
+
8
+ S0 ::= A 'h'
9
+ S1 ::= S0 'e'
10
+ S2 ::= S1 'l'
11
+ S3 ::= S2 'l'
12
+ F ::= S3 'o'
13
+
14
+ X0 ::= A 'h'
15
+ X1 ::= X0 'e'
16
+ X2 ::= X1 'l'
17
+ F ::= X2 'p'
18
+
19
+ ## DFA
20
+
21
+ {S0,X0} = A 'h'
22
+ {S1,X1} ::= {S0,X0} 'e'
23
+ {S2,X2} ::= {S1,X1} 'l'
24
+ S3 ::= {S2,X2} 'l'
25
+ F ::= {S2,X2} 'p'
26
+ F ::= S3 'o'
27
+
28
+ P0 = A 'h'
29
+ P1 ::= P0 'e'
30
+ P2 ::= P1 'l'
31
+ S3 ::= P2 'l'
32
+ F ::= P2 'p'
33
+ F ::= S3 'o'
34
+
35
+ ## Tokenizer FA
36
+
37
+ T ::= I 'true' // T0, T1, T2
38
+ F ::= I 'false' // F0, F2, F2, F3
39
+ N ::= I 'null' // N0, N1, N2
40
+ Id ::= I letter
41
+ Id ::= Id letter
42
+ Id ::= Id digit
43
+
44
+ ## Tokenizer DFA
45
+
46
+ {T0,Id} = I 't'
47
+ {T1,Id} = {T0,Id} 'r'
48
+ Id = {T0,Id} letter(except 'r')
49
+ Id = {T0,Id} digit
50
+
51
+ {a..b}{c..d}{e..f}
52
+
53
+ ```js
54
+ const t0 = [[init, one('t')]]
55
+ const t1 = [[t0, one('r')]]
56
+ const t2 = [[t1, one('u')]]
57
+ const t = [[t2, one('e')]]
58
+
59
+ const id = [
60
+ [init, letter]
61
+ [() => id, letter]
62
+ [() => id, digit]
63
+ ]
64
+
65
+ const dfa = ([t, f, n, id]) => ?
66
+ ```
67
+
68
+ ## Set
69
+
70
+ ```js
71
+ const letter = byteSet(['_', '$', ['a', 'z'], ['A', 'Z']])
72
+ ```
73
+
74
+ Letters and digits
75
+
76
+ | | |
77
+ |------|------------|
78
+ |`$` |`0x24` |
79
+ |`0..9`|`0x30..0x39`|
80
+ |`A..Z`|`0x41..0x5A`|
81
+ |`_` |`0x5F` |
82
+ |`a..z`|`0x61..0x7A`|
83
+
84
+ ## Bit set
85
+
86
+ For a byte, it is an array of 8 uint32, bigint (0..2^256-1), or string of 16 characters.
87
+
88
+ ### 16 bit set.
89
+
90
+ It can use an intermediate state.
91
+
92
+ | | | |
93
+ |---|-------|--------|
94
+ |`2`|`4` |`$` |
95
+ |`3`|`..9` |`0..9` |
96
+ |`4`|`1..` |`A..O` |
97
+ |`5`|`..A,F`|`P..Z,_`|
98
+ |`6`|`1..` |`a..o` |
99
+ |`7`|`..A` |`p..z` |
100
+
101
+ ```js
102
+ const init = [
103
+ _, _, i2, _,
104
+ i4, i5, i4, i7,
105
+ _, _, _, _,
106
+ _, _, _, _]
107
+
108
+ const i2 = [
109
+ _, _, _, _,
110
+ id, _, _, _,
111
+ _, _, _, _,
112
+ _, _, _, _]
113
+
114
+ const i3 = [
115
+ id, id, id, id,
116
+ id, id, id, id,
117
+ id, id, _, _,
118
+ _, _, _, _]
119
+
120
+ const i4 = [
121
+ _, id, id, id,
122
+ id, id, id, id,
123
+ id, id, id, id,
124
+ id, id, id, id]
125
+
126
+ const i5 = [
127
+ id, id, id, id,
128
+ id, id, id, id,
129
+ id, id, id, _,
130
+ _, _, _, id]
131
+
132
+ const i7 = [
133
+ id, id, id, id,
134
+ id, id, id, id,
135
+ id, id, id, _,
136
+ _, _, _, _]
137
+
138
+ const id = [
139
+ _, _, i2, i3,
140
+ i4, i5, i4, i7,
141
+ _, _, _, _,
142
+ _, _, _, _]
143
+ ```
144
+
145
+ ```js
146
+ const init =
147
+ 000_000_001_000
148
+ 010_011_100_101
149
+ 000_000_000_000
150
+ 000_000_000_000
151
+
152
+ const i = [
153
+ // 1
154
+ 0000_1000_0000_0000,
155
+ // 2
156
+ 1111_1111_1100_0000,
157
+ // 3
158
+ 0111_1111_1111_1111,
159
+ // 4
160
+ 1111_1111_1110_0001,
161
+ // 5
162
+ 1111_1111_1110_0000,
163
+ ]
164
+ ```
package/doc/vm.md CHANGED
@@ -133,7 +133,7 @@ struct Object {
133
133
 
134
134
  struct Array {
135
135
  length: u32,
136
- array: [Value; self.lenght],
136
+ array: [Value; self.length],
137
137
  }
138
138
  ```
139
139
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functionalscript",
3
- "version": "0.0.407",
3
+ "version": "0.0.410",
4
4
  "description": "FunctionalScript is a functional subset of JavaScript",
5
5
  "main": "module.f.cjs",
6
6
  "scripts": {