@spakhm/ts-parsec 0.4.2 → 0.4.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/dist/index.js +13 -1
- package/dist/lib.d.ts +2 -2
- package/dist/lib.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib.ts +15 -3
package/dist/index.js
CHANGED
|
@@ -147,14 +147,26 @@ var sepBy = (item, sep, trailingSep = "allow") => toParser((source) => {
|
|
|
147
147
|
res.push(res_.res);
|
|
148
148
|
}
|
|
149
149
|
while (true) {
|
|
150
|
+
source.push();
|
|
150
151
|
const sepres_ = attempt(sep)(source);
|
|
151
152
|
if (sepres_.type == "err") {
|
|
153
|
+
source.pop_rollback();
|
|
152
154
|
return trailingSep === "require" ? err(0, 0, "") : ok(res);
|
|
153
155
|
}
|
|
154
156
|
const res_2 = attempt(item)(source);
|
|
155
157
|
if (res_2.type == "err") {
|
|
156
|
-
|
|
158
|
+
if (trailingSep === "forbid") {
|
|
159
|
+
source.pop_rollback();
|
|
160
|
+
return err(0, 0, "");
|
|
161
|
+
} else if (trailingSep === "leave") {
|
|
162
|
+
source.pop_rollback();
|
|
163
|
+
return ok(res);
|
|
164
|
+
} else {
|
|
165
|
+
source.pop_continue();
|
|
166
|
+
return ok(res);
|
|
167
|
+
}
|
|
157
168
|
} else {
|
|
169
|
+
source.pop_continue();
|
|
158
170
|
res.push(res_2.res);
|
|
159
171
|
}
|
|
160
172
|
}
|
package/dist/lib.d.ts
CHANGED
|
@@ -16,8 +16,8 @@ export declare const lower: parser<string>;
|
|
|
16
16
|
export declare const upper: parser<string>;
|
|
17
17
|
export declare const alpha: parser<string>;
|
|
18
18
|
export declare const alnum: parser<string>;
|
|
19
|
-
export declare const sepBy: <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep?: "allow" | "forbid" | "require") => parser<T[]>;
|
|
20
|
-
export declare const sepBy1: <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep?: "allow" | "forbid" | "require") => parser<T[]>;
|
|
19
|
+
export declare const sepBy: <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep?: "allow" | "forbid" | "require" | "leave") => parser<T[]>;
|
|
20
|
+
export declare const sepBy1: <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep?: "allow" | "forbid" | "require" | "leave") => parser<T[]>;
|
|
21
21
|
export declare function binop<O, D, N>(operator: parserlike<O>, operand: parserlike<D>, makeNode: (op: O, left: D | N, right: D) => N): parser<N | D>;
|
|
22
22
|
export declare function binopr<O, D, N>(operator: parserlike<O>, operand: parserlike<D>, makeNode: (op: O, left: D, right: D | N) => N): parser<N | D>;
|
|
23
23
|
export declare const noop: parser<boolean>;
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGjD,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAUvD,CAAC;AAEL,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,CAM5D,CAAC;AAEL,eAAO,MAAM,MAAM,GAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAE,KAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAS3G,CAAC;AAEL,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;IACpD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAE,KAAG,UAAU,CAAC,EAAE,CAgBvG,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CAatD,CAAC;AAEL,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CACD,CAAC;AAE1D,eAAO,MAAM,KAAK,gBAAkB,CAAC;AAErC,eAAO,MAAM,GAAG,gBACO,CAAC;AAExB,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,qBAIrC,CAAC;AAEL,eAAO,MAAM,GAAG,gBAMd,CAAC;AAEH,eAAO,MAAM,KAAK,gBAAkB,CAAC;AACrC,eAAO,MAAM,KAAK,gBAAkB,CAAC;AACrC,eAAO,MAAM,KAAK,gBAAuB,CAAC;AAC1C,eAAO,MAAM,KAAK,gBAAuB,CAAC;AAE1C,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,cAAa,OAAO,GAAG,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGjD,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAUvD,CAAC;AAEL,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,CAM5D,CAAC;AAEL,eAAO,MAAM,MAAM,GAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAE,KAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAS3G,CAAC;AAEL,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;IACpD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAE,KAAG,UAAU,CAAC,EAAE,CAgBvG,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CAatD,CAAC;AAEL,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CACD,CAAC;AAE1D,eAAO,MAAM,KAAK,gBAAkB,CAAC;AAErC,eAAO,MAAM,GAAG,gBACO,CAAC;AAExB,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,qBAIrC,CAAC;AAEL,eAAO,MAAM,GAAG,gBAMd,CAAC;AAEH,eAAO,MAAM,KAAK,gBAAkB,CAAC;AACrC,eAAO,MAAM,KAAK,gBAAkB,CAAC;AACrC,eAAO,MAAM,KAAK,gBAAuB,CAAC;AAC1C,eAAO,MAAM,KAAK,gBAAuB,CAAC;AAE1C,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,cAAa,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAiB,KAAG,MAAM,CAAC,CAAC,EAAE,CAoC7I,CAAC;AAEL,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,cAAa,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAiB,KAAG,MAAM,CAAC,CAAC,EAAE,CAK9I,CAAC;AAEL,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CASf;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5B,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAiBf;AAED,eAAO,MAAM,IAAI,iBAAoC,CAAC;AAEtD,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,iBAOrC,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,cAKtC,CAAC;AAEH,eAAO,MAAM,KAAK,GAAI,OAAO;IAAE,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;CAAE,mBASvD,CAAC;AAEH,eAAO,MAAM,GAAG,cAAe,CAAC;AAEhC,eAAO,MAAM,GAAG,cAAY,CAAC"}
|
package/package.json
CHANGED
package/src/lib.ts
CHANGED
|
@@ -97,7 +97,7 @@ export const upper = range('A', 'Z');
|
|
|
97
97
|
export const alpha = either(lower, upper);
|
|
98
98
|
export const alnum = either(alpha, digit);
|
|
99
99
|
|
|
100
|
-
export const sepBy = <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep: 'allow' | 'forbid' | 'require' = 'allow'): parser<T[]> =>
|
|
100
|
+
export const sepBy = <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep: 'allow' | 'forbid' | 'require' | 'leave' = 'allow'): parser<T[]> =>
|
|
101
101
|
toParser((source: stream) => {
|
|
102
102
|
const res: T[] = [];
|
|
103
103
|
|
|
@@ -109,21 +109,33 @@ export const sepBy = <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
while (true) {
|
|
112
|
+
source.push();
|
|
112
113
|
const sepres_ = attempt(sep)(source);
|
|
113
114
|
if (sepres_.type == 'err') {
|
|
115
|
+
source.pop_rollback();
|
|
114
116
|
return trailingSep === 'require' ? err(0, 0, '') : ok(res);
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
const res_ = attempt(item)(source);
|
|
118
120
|
if (res_.type == 'err') {
|
|
119
|
-
|
|
121
|
+
if (trailingSep === 'forbid') {
|
|
122
|
+
source.pop_rollback();
|
|
123
|
+
return err(0, 0, '');
|
|
124
|
+
} else if (trailingSep === 'leave') {
|
|
125
|
+
source.pop_rollback();
|
|
126
|
+
return ok(res);
|
|
127
|
+
} else {
|
|
128
|
+
source.pop_continue();
|
|
129
|
+
return ok(res);
|
|
130
|
+
}
|
|
120
131
|
} else {
|
|
132
|
+
source.pop_continue();
|
|
121
133
|
res.push(res_.res);
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
136
|
});
|
|
125
137
|
|
|
126
|
-
export const sepBy1 = <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep: 'allow' | 'forbid' | 'require' = 'allow'): parser<T[]> =>
|
|
138
|
+
export const sepBy1 = <T, U>(item: parserlike<T>, sep: parserlike<U>, trailingSep: 'allow' | 'forbid' | 'require' | 'leave' = 'allow'): parser<T[]> =>
|
|
127
139
|
toParser((source: stream) => {
|
|
128
140
|
const res = sepBy(item, sep, trailingSep)(source);
|
|
129
141
|
if (res.type == 'err') return res;
|