|
@@ -3,11 +3,14 @@
|
|
*
|
|
*
|
|
* @author David Sehnal <david.sehnal@gmail.com>
|
|
* @author David Sehnal <david.sehnal@gmail.com>
|
|
*/
|
|
*/
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* Adapted from Parsimmon (https://github.com/jneen/parsimmon)
|
|
* Adapted from Parsimmon (https://github.com/jneen/parsimmon)
|
|
* Copyright (c) 2011-present J. Adkisson (http://jneen.net).
|
|
* Copyright (c) 2011-present J. Adkisson (http://jneen.net).
|
|
*/
|
|
*/
|
|
|
|
+/**
|
|
|
|
+* @author Koya Sakuma
|
|
|
|
+* implementation of seqMap for mol-script/transpiler/helper.ts
|
|
|
|
+**/
|
|
|
|
|
|
export class MonadicParser<A> {
|
|
export class MonadicParser<A> {
|
|
constructor(public _: MonadicParser.Action<A>) { }
|
|
constructor(public _: MonadicParser.Action<A>) { }
|
|
@@ -236,15 +239,7 @@ export namespace MonadicParser {
|
|
|
|
|
|
export type Result<T> = Success<T> | Failure
|
|
export type Result<T> = Success<T> | Failure
|
|
|
|
|
|
- //export function lookahead<A>(x: MonadicParser<A> | string | RegExp): MonadicParser<null> {
|
|
|
|
- //export function seq(...parsers: MonadicParser<any>[]): MonadicParser<any[]> {
|
|
|
|
- //export function seq<A, B, C>(a: MonadicParser<A>, b: MonadicParser<B>, c: MonadicParser<C>): MonadicParser<[A, B, C]>
|
|
|
|
-// export function alt(...parsers: MonadicParser<any>[]): MonadicParser<any> {
|
|
|
|
- // const numParsers = parsers.length;
|
|
|
|
- // if (numParsers === 0) {
|
|
|
|
- // return fail('zero alternates');
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
|
|
+
|
|
export function seqMap( a: MonadicParser<any>,b:MonadicParser<any>,c:any) {
|
|
export function seqMap( a: MonadicParser<any>,b:MonadicParser<any>,c:any) {
|
|
var args = [].slice.call(arguments);
|
|
var args = [].slice.call(arguments);
|
|
if (args.length === 0) {
|
|
if (args.length === 0) {
|
|
@@ -267,28 +262,7 @@ export namespace MonadicParser {
|
|
return language;
|
|
return language;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
- // function seq() {
|
|
|
|
- //var parsers = [].slice.call(arguments);
|
|
|
|
-// var numParsers = parsers.length;
|
|
|
|
-// for (var j = 0; j < numParsers; j += 1) {
|
|
|
|
-// assertParser(parsers[j]);
|
|
|
|
-// }
|
|
|
|
-// return Parsimmon(function(input, i) {
|
|
|
|
-// var result;
|
|
|
|
-// var accum = new Array(numParsers);
|
|
|
|
-// for (var j = 0; j < numParsers; j += 1) {
|
|
|
|
- // result = mergeReplies(parsers[j]._(input, i), result);
|
|
|
|
- //if (!result.status) {
|
|
|
|
-// return result;
|
|
|
|
-// }
|
|
|
|
-// accum[j] = result.value;
|
|
|
|
-// i = result.index;
|
|
|
|
-// }
|
|
|
|
-// return mergeReplies(makeSuccess(i, accum), result);
|
|
|
|
-// });
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
|
|
+
|
|
export function seq<A>(a: MonadicParser<A>): MonadicParser<[A]>
|
|
export function seq<A>(a: MonadicParser<A>): MonadicParser<[A]>
|
|
export function seq<A, B>(a: MonadicParser<A>, b: MonadicParser<B>): MonadicParser<[A, B]>
|
|
export function seq<A, B>(a: MonadicParser<A>, b: MonadicParser<B>): MonadicParser<[A, B]>
|
|
export function seq<A, B, C>(a: MonadicParser<A>, b: MonadicParser<B>, c: MonadicParser<C>): MonadicParser<[A, B, C]>
|
|
export function seq<A, B, C>(a: MonadicParser<A>, b: MonadicParser<B>, c: MonadicParser<C>): MonadicParser<[A, B, C]>
|
|
@@ -369,8 +343,6 @@ export namespace MonadicParser {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
- //return new MonadicParser<any[]>((input, index) => {
|
|
|
|
export function regexp(re: RegExp, group = 0) {
|
|
export function regexp(re: RegExp, group = 0) {
|
|
const anchored = anchoredRegexp(re);
|
|
const anchored = anchoredRegexp(re);
|
|
const expected = '' + re;
|
|
const expected = '' + re;
|