extra-parser 0.1.0 → 0.2.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/README.md +31 -23
- package/lib/create-token-pattern-from-regexp.d.ts +2 -2
- package/lib/create-token-pattern-from-regexp.js +14 -12
- package/lib/create-token-pattern-from-regexp.js.map +1 -1
- package/lib/parse.d.ts +1 -1
- package/lib/parse.js +6 -9
- package/lib/parse.js.map +1 -1
- package/lib/tokenize.d.ts +1 -1
- package/lib/tokenize.js +7 -10
- package/lib/tokenize.js.map +1 -1
- package/lib/types.d.ts +13 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,44 +17,52 @@ interface INode<T extends string> {
|
|
|
17
17
|
type: T
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
interface
|
|
21
|
-
|
|
20
|
+
interface ITokenPatternMatch<T extends IToken<string>> {
|
|
21
|
+
consumed: number
|
|
22
|
+
token: T
|
|
23
|
+
}
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
interface INodePatternMatch<T extends INode<string>> {
|
|
26
|
+
consumed: number
|
|
27
|
+
node: T
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
type TokenPattern<Token extends IToken<string>> =
|
|
31
|
+
(text: string) => ITokenPatternMatch<Token> | Falsy
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
33
|
+
type NodePattern<
|
|
34
|
+
Token extends IToken<string>
|
|
35
|
+
, Node extends INode<string>
|
|
36
|
+
> = (tokens: Array<Token>) => INodePatternMatch<Node> | Falsy
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
### tokenize
|
|
39
40
|
```ts
|
|
40
|
-
function tokenize<
|
|
41
|
-
|
|
42
|
-
,
|
|
43
|
-
|
|
41
|
+
function tokenize<
|
|
42
|
+
Token extends IToken<string>
|
|
43
|
+
, TokenPattern extends ITokenPattern<Token>
|
|
44
|
+
>(
|
|
45
|
+
text: string
|
|
46
|
+
, patterns: Array<TokenPattern>
|
|
47
|
+
): IterableIterator<Token>
|
|
44
48
|
```
|
|
45
49
|
|
|
46
50
|
### parse
|
|
47
51
|
```ts
|
|
48
|
-
function parse<
|
|
49
|
-
|
|
50
|
-
,
|
|
51
|
-
|
|
52
|
+
function parse<
|
|
53
|
+
Token extends IToken<string>
|
|
54
|
+
, Node extends INode<string>
|
|
55
|
+
, NodePattern extends INodePattern<Token, Node>
|
|
56
|
+
>(
|
|
57
|
+
tokens: Array<Token>
|
|
58
|
+
, patterns: Array<NodePattern>
|
|
59
|
+
): IterableIterator<Node>
|
|
52
60
|
```
|
|
53
61
|
|
|
54
62
|
### createTokenPatternFromRegExp
|
|
55
63
|
```ts
|
|
56
|
-
function createTokenPatternFromRegExp<
|
|
57
|
-
tokenType:
|
|
64
|
+
function createTokenPatternFromRegExp<TokenType extends string>(
|
|
65
|
+
tokenType: TokenType
|
|
58
66
|
, regExp: RegExp
|
|
59
|
-
):
|
|
67
|
+
): TokenPattern<IToken<TokenType>>
|
|
60
68
|
```
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function createTokenPatternFromRegExp<
|
|
1
|
+
import { IToken, ITokenPattern } from './types';
|
|
2
|
+
export declare function createTokenPatternFromRegExp<TokenType extends string>(tokenType: TokenType, regExp: RegExp): ITokenPattern<IToken<TokenType>>;
|
|
@@ -4,20 +4,22 @@ exports.createTokenPatternFromRegExp = void 0;
|
|
|
4
4
|
const types_1 = require("@blackglory/types");
|
|
5
5
|
function createTokenPatternFromRegExp(tokenType, regExp) {
|
|
6
6
|
const startsWithRegExp = convertToStartsWithRegExp(regExp);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
7
|
+
return (text) => {
|
|
8
|
+
const result = startsWithRegExp.exec(text);
|
|
9
|
+
if ((0, types_1.isntNull)(result)) {
|
|
10
|
+
const [matchedText] = result;
|
|
11
|
+
return {
|
|
12
|
+
consumed: matchedText.length,
|
|
13
|
+
token: {
|
|
14
|
+
type: tokenType,
|
|
15
|
+
value: matchedText
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
return false;
|
|
18
21
|
}
|
|
19
22
|
};
|
|
20
|
-
return pattern;
|
|
21
23
|
}
|
|
22
24
|
exports.createTokenPatternFromRegExp = createTokenPatternFromRegExp;
|
|
23
25
|
function convertToStartsWithRegExp(re) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-token-pattern-from-regexp.js","sourceRoot":"","sources":["../src/create-token-pattern-from-regexp.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"create-token-pattern-from-regexp.js","sourceRoot":"","sources":["../src/create-token-pattern-from-regexp.ts"],"names":[],"mappings":";;;AACA,6CAA4C;AAG5C,SAAgB,4BAA4B,CAC1C,SAAoB,EACpB,MAAc;IAEd,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAE1D,OAAO,CAAC,IAAY,EAAiD,EAAE;QACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;YAC5B,OAAO;gBACL,QAAQ,EAAE,WAAW,CAAC,MAAM;gBAC5B,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,WAAW;iBACnB;aACF,CAAA;SACF;aAAM;YACL,OAAO,KAAK,CAAA;SACb;IACH,CAAC,CAAA;AACH,CAAC;AArBD,oEAqBC;AAED,SAAS,yBAAyB,CAAC,EAAU;IAC3C,OAAO,IAAI,MAAM,CACf,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EACvD,EAAE,CAAC,KAAK,CACT,CAAA;AACH,CAAC"}
|
package/lib/parse.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IToken, INodePattern, INode } from './types';
|
|
2
|
-
export declare function parse<
|
|
2
|
+
export declare function parse<Token extends IToken<string>, Node extends INode<string>, NodePattern extends INodePattern<Token, Node>>(tokens: Array<Token>, patterns: Array<NodePattern>): IterableIterator<Node>;
|
package/lib/parse.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parse = void 0;
|
|
4
|
-
|
|
4
|
+
const prelude_1 = require("@blackglory/prelude");
|
|
5
|
+
function* parse(tokens, patterns) {
|
|
5
6
|
let i = 0;
|
|
6
7
|
loop: while (i < tokens.length) {
|
|
7
8
|
const remainingTokens = tokens.slice(i);
|
|
8
|
-
for (const
|
|
9
|
-
const result =
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
type: nodeType,
|
|
13
|
-
...result.result
|
|
14
|
-
};
|
|
15
|
-
yield node;
|
|
9
|
+
for (const pattern of patterns) {
|
|
10
|
+
const result = pattern(remainingTokens);
|
|
11
|
+
if ((0, prelude_1.isntFalsy)(result)) {
|
|
12
|
+
yield result.node;
|
|
16
13
|
i += result.consumed;
|
|
17
14
|
continue loop;
|
|
18
15
|
}
|
package/lib/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAG/C,QAAe,CAAC,CAAC,KAAK,CAKpB,MAAoB,EACpB,QAA4B;IAE5B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;QAC9B,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAEvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;YACvC,IAAI,IAAA,mBAAS,EAAC,MAAM,CAAC,EAAE;gBACrB,MAAM,MAAM,CAAC,IAAI,CAAA;gBACjB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAA;gBACpB,SAAS,IAAI,CAAA;aACd;SACF;QAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;KAC7D;AACH,CAAC;AAvBD,sBAuBC"}
|
package/lib/tokenize.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ITokenPattern, IToken } from './types';
|
|
2
|
-
export declare function tokenize<
|
|
2
|
+
export declare function tokenize<Token extends IToken<string>, TokenPattern extends ITokenPattern<Token>>(text: string, patterns: Array<TokenPattern>): IterableIterator<Token>;
|
package/lib/tokenize.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.tokenize = void 0;
|
|
4
|
-
|
|
4
|
+
const prelude_1 = require("@blackglory/prelude");
|
|
5
|
+
function* tokenize(text, patterns) {
|
|
5
6
|
let i = 0;
|
|
6
7
|
loop: while (i < text.length) {
|
|
7
8
|
const remainingText = text.slice(i);
|
|
8
|
-
for (const
|
|
9
|
-
const result =
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
type: tokenType,
|
|
13
|
-
value: remainingText.slice(0, result.consumed)
|
|
14
|
-
};
|
|
15
|
-
yield token;
|
|
9
|
+
for (const pattern of patterns) {
|
|
10
|
+
const result = pattern(remainingText);
|
|
11
|
+
if ((0, prelude_1.isntFalsy)(result)) {
|
|
12
|
+
yield result.token;
|
|
16
13
|
i += result.consumed;
|
|
17
14
|
continue loop;
|
|
18
15
|
}
|
|
19
16
|
}
|
|
20
|
-
throw new Error(`Unknown text: ${remainingText}`);
|
|
17
|
+
throw new Error(`Unknown text: ${JSON.stringify(remainingText)}`);
|
|
21
18
|
}
|
|
22
19
|
}
|
|
23
20
|
exports.tokenize = tokenize;
|
package/lib/tokenize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAG/C,QAAe,CAAC,CAAC,QAAQ,CAIvB,IAAY,EACZ,QAA6B;IAE7B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;YACrC,IAAI,IAAA,mBAAS,EAAC,MAAM,CAAC,EAAE;gBACrB,MAAM,MAAM,CAAC,KAAK,CAAA;gBAClB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAA;gBACpB,SAAS,IAAI,CAAA;aACd;SACF;QAED,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;KAClE;AACH,CAAC;AAtBD,4BAsBC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Falsy } from '@blackglory/prelude';
|
|
1
2
|
export interface IToken<T extends string> {
|
|
2
3
|
type: T;
|
|
3
4
|
value: string;
|
|
@@ -5,16 +6,17 @@ export interface IToken<T extends string> {
|
|
|
5
6
|
export interface INode<T extends string> {
|
|
6
7
|
type: T;
|
|
7
8
|
}
|
|
8
|
-
export interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
consumed: number;
|
|
12
|
-
};
|
|
9
|
+
export interface ITokenPatternMatch<T extends IToken<string>> {
|
|
10
|
+
consumed: number;
|
|
11
|
+
token: T;
|
|
13
12
|
}
|
|
14
|
-
export interface
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
export interface INodePatternMatch<T extends INode<string>> {
|
|
14
|
+
consumed: number;
|
|
15
|
+
node: T;
|
|
16
|
+
}
|
|
17
|
+
export interface ITokenPattern<Token extends IToken<string>> {
|
|
18
|
+
(text: string): ITokenPatternMatch<Token> | Falsy;
|
|
19
|
+
}
|
|
20
|
+
export interface INodePattern<Token extends IToken<string>, Node extends INode<string>> {
|
|
21
|
+
(tokens: Array<Token>): INodePatternMatch<Node> | Falsy;
|
|
20
22
|
}
|