extra-parser 0.1.0 → 0.2.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/README.md +35 -27
- 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 +17 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,53 +8,61 @@ yarn add extra-parser
|
|
|
8
8
|
|
|
9
9
|
## API
|
|
10
10
|
```ts
|
|
11
|
-
interface IToken<
|
|
12
|
-
type:
|
|
11
|
+
interface IToken<Type extends string> {
|
|
12
|
+
type: Type
|
|
13
13
|
value: string
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
interface INode<
|
|
17
|
-
type:
|
|
16
|
+
interface INode<Type extends string> {
|
|
17
|
+
type: Type
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
interface
|
|
21
|
-
|
|
20
|
+
interface ITokenPatternMatch<Token extends IToken<string>> {
|
|
21
|
+
consumed: number
|
|
22
|
+
token: Token
|
|
23
|
+
}
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
interface INodePatternMatch<Node extends INode<string>> {
|
|
26
|
+
consumed: number
|
|
27
|
+
node: Node
|
|
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,20 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { Falsy } from '@blackglory/prelude';
|
|
2
|
+
export interface IToken<Type extends string> {
|
|
3
|
+
type: Type;
|
|
3
4
|
value: string;
|
|
4
5
|
}
|
|
5
|
-
export interface INode<
|
|
6
|
-
type:
|
|
6
|
+
export interface INode<Type extends string> {
|
|
7
|
+
type: Type;
|
|
7
8
|
}
|
|
8
|
-
export interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
consumed: number;
|
|
12
|
-
};
|
|
9
|
+
export interface ITokenPatternMatch<Token extends IToken<string>> {
|
|
10
|
+
consumed: number;
|
|
11
|
+
token: Token;
|
|
13
12
|
}
|
|
14
|
-
export interface
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
export interface INodePatternMatch<Node extends INode<string>> {
|
|
14
|
+
consumed: number;
|
|
15
|
+
node: Node;
|
|
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
|
}
|