pacc 6.7.1 → 6.7.3
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 +46 -44
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, divider;
|
|
80
|
+
let state, value, hex, divider, 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
|
}
|
|
@@ -106,9 +109,10 @@ export function* tokens(string) {
|
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
switch (c) {
|
|
109
|
-
case
|
|
110
|
-
case
|
|
112
|
+
case "\n":
|
|
113
|
+
case "\r":
|
|
111
114
|
case "\t":
|
|
115
|
+
case "\v":
|
|
112
116
|
case " ":
|
|
113
117
|
switch (state) {
|
|
114
118
|
case "number":
|
|
@@ -121,7 +125,7 @@ export function* tokens(string) {
|
|
|
121
125
|
value += c;
|
|
122
126
|
break;
|
|
123
127
|
case "identifier":
|
|
124
|
-
yield
|
|
128
|
+
yield keywordOrIdentifier();
|
|
125
129
|
value = undefined;
|
|
126
130
|
state = undefined;
|
|
127
131
|
break;
|
|
@@ -145,22 +149,23 @@ export function* tokens(string) {
|
|
|
145
149
|
case "number-fraction":
|
|
146
150
|
yield [value];
|
|
147
151
|
case undefined:
|
|
148
|
-
|
|
149
|
-
state = "string";
|
|
152
|
+
startString(c);
|
|
150
153
|
break;
|
|
151
154
|
case "string":
|
|
152
|
-
|
|
153
|
-
|
|
155
|
+
if (c === quote) {
|
|
156
|
+
yield [value];
|
|
157
|
+
state = undefined;
|
|
158
|
+
} else {
|
|
159
|
+
value += c;
|
|
160
|
+
}
|
|
154
161
|
break;
|
|
155
162
|
case "identifier":
|
|
156
|
-
yield
|
|
157
|
-
|
|
158
|
-
state = "string";
|
|
163
|
+
yield keywordOrIdentifier();
|
|
164
|
+
startString(c);
|
|
159
165
|
break;
|
|
160
166
|
default:
|
|
161
167
|
yield lookup[state];
|
|
162
|
-
|
|
163
|
-
state = "string";
|
|
168
|
+
startString(c);
|
|
164
169
|
}
|
|
165
170
|
break;
|
|
166
171
|
case "!":
|
|
@@ -190,7 +195,7 @@ export function* tokens(string) {
|
|
|
190
195
|
value += c;
|
|
191
196
|
break;
|
|
192
197
|
case "identifier":
|
|
193
|
-
yield
|
|
198
|
+
yield keywordOrIdentifier();
|
|
194
199
|
state = c;
|
|
195
200
|
break;
|
|
196
201
|
default:
|
|
@@ -207,13 +212,13 @@ export function* tokens(string) {
|
|
|
207
212
|
case undefined:
|
|
208
213
|
state = c;
|
|
209
214
|
break;
|
|
210
|
-
case "string":
|
|
211
|
-
value += c;
|
|
212
|
-
break;
|
|
213
215
|
case "identifier":
|
|
214
|
-
yield
|
|
216
|
+
yield keywordOrIdentifier();
|
|
215
217
|
state = c;
|
|
216
218
|
break;
|
|
219
|
+
case "string":
|
|
220
|
+
value += c;
|
|
221
|
+
break;
|
|
217
222
|
default:
|
|
218
223
|
state += c;
|
|
219
224
|
}
|
|
@@ -244,13 +249,13 @@ export function* tokens(string) {
|
|
|
244
249
|
case undefined:
|
|
245
250
|
state = c;
|
|
246
251
|
break;
|
|
247
|
-
case "string":
|
|
248
|
-
value += c;
|
|
249
|
-
break;
|
|
250
252
|
case "identifier":
|
|
251
|
-
yield
|
|
253
|
+
yield keywordOrIdentifier();
|
|
252
254
|
state = c;
|
|
253
255
|
break;
|
|
256
|
+
case "string":
|
|
257
|
+
value += c;
|
|
258
|
+
break;
|
|
254
259
|
default:
|
|
255
260
|
yield lookup[state];
|
|
256
261
|
state = c;
|
|
@@ -317,16 +322,13 @@ export function* tokens(string) {
|
|
|
317
322
|
case undefined:
|
|
318
323
|
break;
|
|
319
324
|
case "string":
|
|
320
|
-
|
|
321
|
-
// @ts-ignore
|
|
322
|
-
error.expression = string;
|
|
323
|
-
throw error;
|
|
325
|
+
throw new Error("unterminated string", { cause: string });
|
|
324
326
|
case "number-fraction":
|
|
325
327
|
case "number":
|
|
326
328
|
yield [value];
|
|
327
329
|
break;
|
|
328
330
|
case "identifier":
|
|
329
|
-
yield
|
|
331
|
+
yield keywordOrIdentifier();
|
|
330
332
|
break;
|
|
331
333
|
default:
|
|
332
334
|
yield lookup[state];
|