tarsec 0.1.0 → 0.1.1
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/dist/combinators.d.ts +11 -1
- package/dist/combinators.js +23 -13
- package/package.json +1 -1
package/dist/combinators.d.ts
CHANGED
|
@@ -142,12 +142,22 @@ export declare function between<O, C, P>(open: Parser<O>, close: Parser<C>, pars
|
|
|
142
142
|
export declare function between1<O, C, P>(open: Parser<O>, close: Parser<C>, parser: Parser<P>): Parser<P[]>;
|
|
143
143
|
/**
|
|
144
144
|
* Parses many instances of the parser separated by separator.
|
|
145
|
-
* The parser
|
|
145
|
+
* The parser will succeed even if it consumes zero instances.
|
|
146
|
+
* To require at least one instance, use `sepBy1`.
|
|
146
147
|
* @param separator
|
|
147
148
|
* @param parser
|
|
148
149
|
* @returns a parser that runs the given parser zero to many times, separated by the separator parser.
|
|
149
150
|
*/
|
|
150
151
|
export declare function sepBy<S, P>(separator: Parser<S>, parser: Parser<P>): Parser<P[]>;
|
|
152
|
+
/**
|
|
153
|
+
* Parses many instances of the parser separated by separator.
|
|
154
|
+
* The parser needs to succeed at least once, otherwise sepBy fails.
|
|
155
|
+
* To not require at least one instance, use `sepBy`.
|
|
156
|
+
* @param separator
|
|
157
|
+
* @param parser
|
|
158
|
+
* @returns a parser that runs the given parser one to many times, separated by the separator parser.
|
|
159
|
+
*/
|
|
160
|
+
export declare function sepBy1<S, P>(separator: Parser<S>, parser: Parser<P>): Parser<P[]>;
|
|
151
161
|
/**
|
|
152
162
|
* Convenience function to use as the second argument to `seq` to get all the results from `seq`
|
|
153
163
|
* @param results
|
package/dist/combinators.js
CHANGED
|
@@ -300,7 +300,8 @@ export function between1(open, close, parser) {
|
|
|
300
300
|
}
|
|
301
301
|
/**
|
|
302
302
|
* Parses many instances of the parser separated by separator.
|
|
303
|
-
* The parser
|
|
303
|
+
* The parser will succeed even if it consumes zero instances.
|
|
304
|
+
* To require at least one instance, use `sepBy1`.
|
|
304
305
|
* @param separator
|
|
305
306
|
* @param parser
|
|
306
307
|
* @returns a parser that runs the given parser zero to many times, separated by the separator parser.
|
|
@@ -312,28 +313,37 @@ export function sepBy(separator, parser) {
|
|
|
312
313
|
while (true) {
|
|
313
314
|
const result = parser(rest);
|
|
314
315
|
if (!result.success) {
|
|
315
|
-
|
|
316
|
-
return failure(result.message, input);
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
return success(results, rest);
|
|
320
|
-
}
|
|
316
|
+
return success(results, rest);
|
|
321
317
|
}
|
|
322
318
|
results.push(result.result);
|
|
323
319
|
rest = result.rest;
|
|
324
320
|
const sepResult = separator(rest);
|
|
325
321
|
if (!sepResult.success) {
|
|
326
|
-
|
|
327
|
-
return failure(sepResult.message, input);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
return success(results, rest);
|
|
331
|
-
}
|
|
322
|
+
return success(results, rest);
|
|
332
323
|
}
|
|
333
324
|
rest = sepResult.rest;
|
|
334
325
|
}
|
|
335
326
|
};
|
|
336
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Parses many instances of the parser separated by separator.
|
|
330
|
+
* The parser needs to succeed at least once, otherwise sepBy fails.
|
|
331
|
+
* To not require at least one instance, use `sepBy`.
|
|
332
|
+
* @param separator
|
|
333
|
+
* @param parser
|
|
334
|
+
* @returns a parser that runs the given parser one to many times, separated by the separator parser.
|
|
335
|
+
*/
|
|
336
|
+
export function sepBy1(separator, parser) {
|
|
337
|
+
return (input) => {
|
|
338
|
+
const result = sepBy(separator, parser)(input);
|
|
339
|
+
if (result.success) {
|
|
340
|
+
if (result.result.length === 0) {
|
|
341
|
+
return failure("expected at least one match", input);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return result;
|
|
345
|
+
};
|
|
346
|
+
}
|
|
337
347
|
/**
|
|
338
348
|
* Convenience function to use as the second argument to `seq` to get all the results from `seq`
|
|
339
349
|
* @param results
|