pacc 6.7.2 → 6.8.0
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.
- package/package.json +1 -1
- package/src/tokens.mjs +60 -67
package/package.json
CHANGED
package/src/tokens.mjs
CHANGED
|
@@ -56,6 +56,20 @@ export /** @type {Token} */ const DOUBLE_BAR = createToken("||", 30, "infixr");
|
|
|
56
56
|
export /** @type {Token} */ const IDENTIFIER = createToken("IDENTIFIER", 0);
|
|
57
57
|
export /** @type {Token} */ const EOF = createToken("EOF", -1, "eof");
|
|
58
58
|
|
|
59
|
+
const keywords = {
|
|
60
|
+
true: [true],
|
|
61
|
+
false: [false]
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const esc = {
|
|
65
|
+
b: "\b",
|
|
66
|
+
f: "\f",
|
|
67
|
+
n: "\n",
|
|
68
|
+
r: "\r",
|
|
69
|
+
t: "\t",
|
|
70
|
+
v: "\v"
|
|
71
|
+
};
|
|
72
|
+
|
|
59
73
|
/**
|
|
60
74
|
* Split property path into tokens
|
|
61
75
|
* @generator
|
|
@@ -63,18 +77,14 @@ export /** @type {Token} */ const EOF = createToken("EOF", -1, "eof");
|
|
|
63
77
|
* @yields {Token}
|
|
64
78
|
*/
|
|
65
79
|
export function* tokens(string) {
|
|
66
|
-
let state, value, hex,
|
|
80
|
+
let state, value, hex, quote;
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
default:
|
|
75
|
-
return [IDENTIFIER, value];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
82
|
+
const keywordOrIdentifier = () => keywords[value] || [IDENTIFIER, value];
|
|
83
|
+
const startString = c => {
|
|
84
|
+
value = "";
|
|
85
|
+
state = "string";
|
|
86
|
+
quote = c;
|
|
87
|
+
};
|
|
78
88
|
|
|
79
89
|
for (const c of string) {
|
|
80
90
|
switch (state) {
|
|
@@ -92,13 +102,6 @@ export function* tokens(string) {
|
|
|
92
102
|
state = "string-escaping-hex";
|
|
93
103
|
hex = "";
|
|
94
104
|
} else {
|
|
95
|
-
const esc = {
|
|
96
|
-
b: "\b",
|
|
97
|
-
f: "\f",
|
|
98
|
-
n: "\n",
|
|
99
|
-
r: "\r",
|
|
100
|
-
t: "\t"
|
|
101
|
-
};
|
|
102
105
|
value += esc[c] || c;
|
|
103
106
|
state = "string";
|
|
104
107
|
}
|
|
@@ -109,11 +112,11 @@ export function* tokens(string) {
|
|
|
109
112
|
case "\n":
|
|
110
113
|
case "\r":
|
|
111
114
|
case "\t":
|
|
115
|
+
case "\v":
|
|
112
116
|
case " ":
|
|
113
117
|
switch (state) {
|
|
114
118
|
case "number":
|
|
115
|
-
|
|
116
|
-
yield [value];
|
|
119
|
+
yield [parseFloat(value)];
|
|
117
120
|
state = undefined;
|
|
118
121
|
case undefined:
|
|
119
122
|
break;
|
|
@@ -121,7 +124,7 @@ export function* tokens(string) {
|
|
|
121
124
|
value += c;
|
|
122
125
|
break;
|
|
123
126
|
case "identifier":
|
|
124
|
-
yield
|
|
127
|
+
yield keywordOrIdentifier();
|
|
125
128
|
value = undefined;
|
|
126
129
|
state = undefined;
|
|
127
130
|
break;
|
|
@@ -142,12 +145,9 @@ export function* tokens(string) {
|
|
|
142
145
|
case "'":
|
|
143
146
|
switch (state) {
|
|
144
147
|
case "number":
|
|
145
|
-
|
|
146
|
-
yield [value];
|
|
148
|
+
yield [parseFloat(value)];
|
|
147
149
|
case undefined:
|
|
148
|
-
|
|
149
|
-
state = "string";
|
|
150
|
-
quote = c;
|
|
150
|
+
startString(c);
|
|
151
151
|
break;
|
|
152
152
|
case "string":
|
|
153
153
|
if (c === quote) {
|
|
@@ -158,16 +158,12 @@ export function* tokens(string) {
|
|
|
158
158
|
}
|
|
159
159
|
break;
|
|
160
160
|
case "identifier":
|
|
161
|
-
yield
|
|
162
|
-
|
|
163
|
-
state = "string";
|
|
164
|
-
quote = c;
|
|
161
|
+
yield keywordOrIdentifier();
|
|
162
|
+
startString(c);
|
|
165
163
|
break;
|
|
166
164
|
default:
|
|
167
165
|
yield lookup[state];
|
|
168
|
-
|
|
169
|
-
state = "string";
|
|
170
|
-
quote = c;
|
|
166
|
+
startString(c);
|
|
171
167
|
}
|
|
172
168
|
break;
|
|
173
169
|
case "!":
|
|
@@ -177,8 +173,7 @@ export function* tokens(string) {
|
|
|
177
173
|
case "|":
|
|
178
174
|
switch (state) {
|
|
179
175
|
case "number":
|
|
180
|
-
|
|
181
|
-
yield [value];
|
|
176
|
+
yield [parseFloat(value)];
|
|
182
177
|
case undefined:
|
|
183
178
|
state = c;
|
|
184
179
|
break;
|
|
@@ -197,7 +192,7 @@ export function* tokens(string) {
|
|
|
197
192
|
value += c;
|
|
198
193
|
break;
|
|
199
194
|
case "identifier":
|
|
200
|
-
yield
|
|
195
|
+
yield keywordOrIdentifier();
|
|
201
196
|
state = c;
|
|
202
197
|
break;
|
|
203
198
|
default:
|
|
@@ -209,33 +204,38 @@ export function* tokens(string) {
|
|
|
209
204
|
case "=":
|
|
210
205
|
switch (state) {
|
|
211
206
|
case "number":
|
|
212
|
-
|
|
213
|
-
yield [value];
|
|
207
|
+
yield [parseFloat(value)];
|
|
214
208
|
case undefined:
|
|
215
209
|
state = c;
|
|
216
210
|
break;
|
|
217
|
-
case "string":
|
|
218
|
-
value += c;
|
|
219
|
-
break;
|
|
220
211
|
case "identifier":
|
|
221
|
-
yield
|
|
212
|
+
yield keywordOrIdentifier();
|
|
222
213
|
state = c;
|
|
223
214
|
break;
|
|
215
|
+
case "string":
|
|
216
|
+
value += c;
|
|
217
|
+
break;
|
|
224
218
|
default:
|
|
225
219
|
state += c;
|
|
226
220
|
}
|
|
227
221
|
break;
|
|
222
|
+
|
|
228
223
|
case ".":
|
|
229
224
|
if (state === "number") {
|
|
230
|
-
|
|
231
|
-
divider = 10;
|
|
225
|
+
value += '.';
|
|
232
226
|
break;
|
|
233
227
|
}
|
|
228
|
+
else if (state === "-") {
|
|
229
|
+
value = '-.';
|
|
230
|
+
state="number";
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
case "-":
|
|
234
235
|
case ":":
|
|
235
236
|
case ";":
|
|
236
237
|
case ",":
|
|
237
238
|
case "+":
|
|
238
|
-
case "-":
|
|
239
239
|
case "*":
|
|
240
240
|
case "/":
|
|
241
241
|
case "(":
|
|
@@ -246,18 +246,17 @@ export function* tokens(string) {
|
|
|
246
246
|
case "}":
|
|
247
247
|
switch (state) {
|
|
248
248
|
case "number":
|
|
249
|
-
|
|
250
|
-
yield [value];
|
|
249
|
+
yield [parseFloat(value)];
|
|
251
250
|
case undefined:
|
|
252
251
|
state = c;
|
|
253
252
|
break;
|
|
254
|
-
case "string":
|
|
255
|
-
value += c;
|
|
256
|
-
break;
|
|
257
253
|
case "identifier":
|
|
258
|
-
yield
|
|
254
|
+
yield keywordOrIdentifier();
|
|
259
255
|
state = c;
|
|
260
256
|
break;
|
|
257
|
+
case "string":
|
|
258
|
+
value += c;
|
|
259
|
+
break;
|
|
261
260
|
default:
|
|
262
261
|
yield lookup[state];
|
|
263
262
|
state = c;
|
|
@@ -277,21 +276,17 @@ export function* tokens(string) {
|
|
|
277
276
|
default:
|
|
278
277
|
yield lookup[state];
|
|
279
278
|
case undefined:
|
|
280
|
-
value = c
|
|
279
|
+
value = c;
|
|
281
280
|
state = "number";
|
|
282
281
|
break;
|
|
282
|
+
case "-":
|
|
283
|
+
state = "number";
|
|
284
|
+
value = "-" + c;
|
|
285
|
+
break;
|
|
283
286
|
case ".":
|
|
284
|
-
state = "number
|
|
285
|
-
value =
|
|
286
|
-
divider = 10;
|
|
287
|
-
case "number-fraction":
|
|
288
|
-
value = value + (c.charCodeAt(0) - 48) / divider;
|
|
289
|
-
divider *= 10;
|
|
290
|
-
break;
|
|
287
|
+
state = "number";
|
|
288
|
+
value = ".";
|
|
291
289
|
case "number":
|
|
292
|
-
// @ts-ignore
|
|
293
|
-
value = value * 10 + c.charCodeAt(0) - 48;
|
|
294
|
-
break;
|
|
295
290
|
case "string":
|
|
296
291
|
case "identifier":
|
|
297
292
|
value += c;
|
|
@@ -302,8 +297,7 @@ export function* tokens(string) {
|
|
|
302
297
|
default:
|
|
303
298
|
switch (state) {
|
|
304
299
|
case "number":
|
|
305
|
-
|
|
306
|
-
yield [value];
|
|
300
|
+
yield [parseFloat(value)];
|
|
307
301
|
case undefined:
|
|
308
302
|
state = "identifier";
|
|
309
303
|
value = c;
|
|
@@ -325,12 +319,11 @@ export function* tokens(string) {
|
|
|
325
319
|
break;
|
|
326
320
|
case "string":
|
|
327
321
|
throw new Error("unterminated string", { cause: string });
|
|
328
|
-
case "number-fraction":
|
|
329
322
|
case "number":
|
|
330
|
-
yield [value];
|
|
323
|
+
yield [parseFloat(value)];
|
|
331
324
|
break;
|
|
332
325
|
case "identifier":
|
|
333
|
-
yield
|
|
326
|
+
yield keywordOrIdentifier();
|
|
334
327
|
break;
|
|
335
328
|
default:
|
|
336
329
|
yield lookup[state];
|