extra-parser 0.6.6 → 0.7.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.
Files changed (40) hide show
  1. package/README.md +8 -19
  2. package/lib/consume-node.d.ts +1 -1
  3. package/lib/consume-node.js +3 -4
  4. package/lib/consume-node.js.map +1 -1
  5. package/lib/create-binary-operator-expression-node-pattern.js +2 -2
  6. package/lib/create-binary-operator-expression-node-pattern.js.map +1 -1
  7. package/lib/create-grouped-expression-node-pattern.js +2 -2
  8. package/lib/create-grouped-expression-node-pattern.js.map +1 -1
  9. package/lib/create-token-pattern-from-regexp.js +10 -10
  10. package/lib/create-token-pattern-from-regexp.js.map +1 -1
  11. package/lib/create-unary-operator-expression-node-pattern.js +2 -2
  12. package/lib/create-unary-operator-expression-node-pattern.js.map +1 -1
  13. package/lib/match-any-of.d.ts +1 -1
  14. package/lib/match-any-of.js +2 -2
  15. package/lib/match-any-of.js.map +1 -1
  16. package/lib/match-repetitions.d.ts +1 -1
  17. package/lib/match-repetitions.js +3 -3
  18. package/lib/match-repetitions.js.map +1 -1
  19. package/lib/match-sequence.d.ts +1 -1
  20. package/lib/match-sequence.js +4 -4
  21. package/lib/match-sequence.js.map +1 -1
  22. package/lib/parse.d.ts +1 -1
  23. package/lib/parse.js +3 -4
  24. package/lib/parse.js.map +1 -1
  25. package/lib/tokenize.d.ts +1 -1
  26. package/lib/tokenize.js +3 -4
  27. package/lib/tokenize.js.map +1 -1
  28. package/lib/types.d.ts +3 -3
  29. package/package.json +1 -1
  30. package/src/consume-node.ts +5 -5
  31. package/src/create-binary-operator-expression-node-pattern.ts +2 -2
  32. package/src/create-grouped-expression-node-pattern.ts +2 -2
  33. package/src/create-token-pattern-from-regexp.ts +10 -7
  34. package/src/create-unary-operator-expression-node-pattern.ts +2 -2
  35. package/src/match-any-of.ts +3 -3
  36. package/src/match-repetitions.ts +4 -4
  37. package/src/match-sequence.ts +5 -5
  38. package/src/parse.ts +4 -5
  39. package/src/tokenize.ts +4 -5
  40. package/src/types.ts +3 -3
package/README.md CHANGED
@@ -8,17 +8,6 @@ npm install --save extra-parser
8
8
  yarn add extra-parser
9
9
  ```
10
10
 
11
- ## FAQ
12
- ### Why are functions asynchronous?
13
- Some parsers make heavy use of recursion,
14
- and most JavaScript engines do not support tail-call optimization,
15
- which leads to the possibility of stack overflow in programs.
16
-
17
- Asynchronous functions are an escape route:
18
- developers can change recursive functions to asynchronous recursive functions
19
- to get their programs out of stack overflow problems
20
- without significantly reducing readability.
21
-
22
11
  ## API
23
12
  ```ts
24
13
  interface IToken {
@@ -41,11 +30,11 @@ interface INodePatternMatch<Node extends INode> {
41
30
  }
42
31
 
43
32
  interface ITokenPattern<Token extends IToken = IToken> {
44
- (text: string): Awaitable<ITokenPatternMatch<Token> | Falsy>
33
+ (text: string): ITokenPatternMatch<Token> | Falsy
45
34
  }
46
35
 
47
36
  interface INodePattern<Token extends IToken = IToken, Node extends INode = INode> {
48
- (tokens: ReadonlyArray<Token>): Awaitable<INodePatternMatch<Node> | Falsy>
37
+ (tokens: ReadonlyArray<Token>): INodePatternMatch<Node> | Falsy
49
38
  }
50
39
 
51
40
  type MapSequenceToPatterns<
@@ -88,7 +77,7 @@ type MapSequenceToMatches<
88
77
  function tokenize<Token extends IToken = IToken>(
89
78
  patterns: Array<ITokenPattern<Token>>
90
79
  , text: string
91
- ): AsyncIterableIterator<Token>
80
+ ): IterableIterator<Token>
92
81
  ```
93
82
 
94
83
  ### parse
@@ -96,7 +85,7 @@ function tokenize<Token extends IToken = IToken>(
96
85
  function parse<Token extends IToken = IToken, Node extends INode = INode>(
97
86
  patterns: Array<INodePattern<Token, Node>>
98
87
  , tokens: Token[]
99
- ): AsyncIterableIterator<Node>
88
+ ): IterableIterator<Node>
100
89
  ```
101
90
 
102
91
  ### consumeNode
@@ -107,7 +96,7 @@ function consumeNode<
107
96
  >(
108
97
  nodePattern: INodePattern<Token, Node>
109
98
  , tokens: Token[]
110
- ): Promise<INodePatternMatch<Node> | Falsy>
99
+ ): INodePatternMatch<Node> | Falsy
111
100
  ```
112
101
 
113
102
  ### consumeToken
@@ -126,7 +115,7 @@ function matchAnyOf<
126
115
  >(
127
116
  nodePatterns: ReadonlyArray<INodePattern<Token, Node>>
128
117
  , tokens: ReadonlyArray<Token>
129
- ): Promise<INodePatternMatch<Node> | Falsy>
118
+ ): INodePatternMatch<Node> | Falsy
130
119
  ```
131
120
 
132
121
  ### matchSequence
@@ -138,7 +127,7 @@ function matchSequence<
138
127
  >(
139
128
  patterns: MapSequenceToPatterns<Sequence, Token, Node>
140
129
  , tokens: ReadonlyArray<Token>
141
- ): Promise<MapSequenceToMatches<Sequence, Token, Node> | Falsy>
130
+ ): MapSequenceToMatches<Sequence, Token, Node> | Falsy
142
131
  ```
143
132
 
144
133
  ### matchRepetitions
@@ -154,7 +143,7 @@ function matchRepetitions<
154
143
  minimumRepetitions?: number = 1
155
144
  maximumRepetitions?: number = Infinity
156
145
  }
157
- ): Promise<Array<Token | INodePatternMatch<Node>> | Falsy>
146
+ ): Array<Token | INodePatternMatch<Node>> | Falsy
158
147
  ```
159
148
 
160
149
  ### createTokenPatternFromRegExp
@@ -1,3 +1,3 @@
1
1
  import { Falsy } from '@blackglory/prelude';
2
2
  import { IToken, INode, INodePattern, INodePatternMatch } from './types';
3
- export declare function consumeNode<Token extends IToken = IToken, Node extends INode = INode>(nodePattern: INodePattern<Token, Node>, tokens: Token[]): Promise<INodePatternMatch<Node> | Falsy>;
3
+ export declare function consumeNode<Token extends IToken = IToken, Node extends INode = INode>(nodePattern: INodePattern<Token, Node>, tokens: Token[]): INodePatternMatch<Node> | Falsy;
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.consumeNode = void 0;
4
- const prelude_1 = require("@blackglory/prelude");
5
- async function consumeNode(nodePattern, tokens) {
6
- const match = await nodePattern(tokens);
7
- if ((0, prelude_1.isntFalsy)(match)) {
4
+ function consumeNode(nodePattern, tokens) {
5
+ const match = nodePattern(tokens);
6
+ if (match) {
8
7
  tokens.splice(0, match.consumed);
9
8
  return match;
10
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"consume-node.js","sourceRoot":"","sources":["../src/consume-node.ts"],"names":[],"mappings":";;;AAAA,iDAAsD;AAQ/C,KAAK,UAAU,WAAW,CAI/B,WAAsC,EACtC,MAAe;IAEf,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;IAEvC,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,EAAE;QACpB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QAChC,OAAO,KAAK,CAAA;KACb;AACH,CAAC;AAbD,kCAaC"}
1
+ {"version":3,"file":"consume-node.js","sourceRoot":"","sources":["../src/consume-node.ts"],"names":[],"mappings":";;;AAQA,SAAgB,WAAW,CAIzB,WAAsC,EACtC,MAAe;IAEf,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAEjC,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QAChC,OAAO,KAAK,CAAA;KACb;AACH,CAAC;AAbD,kCAaC"}
@@ -4,8 +4,8 @@ exports.createBinaryOperatorExpressionNodePattern = void 0;
4
4
  const prelude_1 = require("@blackglory/prelude");
5
5
  const match_sequence_1 = require("./match-sequence");
6
6
  function createBinaryOperatorExpressionNodePattern({ nodeType, centerTokenType, rightNodePattern, leftNodePattern }) {
7
- return async (tokens) => {
8
- const matches = await (0, match_sequence_1.matchSequence)([
7
+ return tokens => {
8
+ const matches = (0, match_sequence_1.matchSequence)([
9
9
  leftNodePattern,
10
10
  centerTokenType,
11
11
  rightNodePattern
@@ -1 +1 @@
1
- {"version":3,"file":"create-binary-operator-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-binary-operator-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAYhD,SAAgB,yCAAyC,CAKvD,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAK/D;IAIC,OAAO,KAAK,EAAC,MAAM,EAAC,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EACjC;YACE,eAAiD;YACjD,eAAe;YACf,gBAAmD;SACpD,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YAC9C,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ;gBACtD,IAAI,EAAE;oBACJ,QAAQ;oBACR,IAAI,EAAE,SAAS,CAAC,IAAoB;oBACpC,KAAK,EAAE,UAAU,CAAC,IAAqB;iBACxC;aACF,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AAnCD,8FAmCC"}
1
+ {"version":3,"file":"create-binary-operator-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-binary-operator-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAYhD,SAAgB,yCAAyC,CAKvD,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAK/D;IAIC,OAAO,MAAM,CAAC,EAAE;QACd,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B;YACE,eAAiD;YACjD,eAAe;YACf,gBAAmD;SACpD,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YAC9C,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ;gBACtD,IAAI,EAAE;oBACJ,QAAQ;oBACR,IAAI,EAAE,SAAS,CAAC,IAAoB;oBACpC,KAAK,EAAE,UAAU,CAAC,IAAqB;iBACxC;aACF,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AAnCD,8FAmCC"}
@@ -4,8 +4,8 @@ exports.createGroupedExpressionNodePattern = void 0;
4
4
  const prelude_1 = require("@blackglory/prelude");
5
5
  const match_sequence_1 = require("./match-sequence");
6
6
  function createGroupedExpressionNodePattern({ leftTokenType, rightTokenType, centerNodePattern }) {
7
- return async (tokens) => {
8
- const matches = await (0, match_sequence_1.matchSequence)([
7
+ return tokens => {
8
+ const matches = (0, match_sequence_1.matchSequence)([
9
9
  leftTokenType,
10
10
  centerNodePattern,
11
11
  rightTokenType
@@ -1 +1 @@
1
- {"version":3,"file":"create-grouped-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-grouped-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAEhD,SAAgB,kCAAkC,CAGhD,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAInD;IACC,OAAO,KAAK,EAAC,MAAM,EAAC,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EACjC;YACE,aAAa;YACb,iBAAqD;YACrD,cAAc;SACf,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YAClD,OAAO;gBACL,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC;gBACpC,IAAI,EAAE,SAAS,CAAC,IAAkB;aACnC,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AAzBD,gFAyBC"}
1
+ {"version":3,"file":"create-grouped-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-grouped-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAEhD,SAAgB,kCAAkC,CAGhD,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAInD;IACC,OAAO,MAAM,CAAC,EAAE;QACd,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B;YACE,aAAa;YACb,iBAAqD;YACrD,cAAc;SACf,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YAClD,OAAO;gBACL,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC;gBACpC,IAAI,EAAE,SAAS,CAAC,IAAkB;aACnC,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AAzBD,gFAyBC"}
@@ -8,17 +8,17 @@ function createTokenPatternFromRegExp(tokenType, regExp) {
8
8
  const result = startsWithRegExp.exec(text);
9
9
  if ((0, prelude_1.isntNull)(result)) {
10
10
  const [matchedText] = result;
11
- return {
12
- consumed: matchedText.length,
13
- token: {
14
- tokenType: tokenType,
15
- value: matchedText
16
- }
17
- };
18
- }
19
- else {
20
- return false;
11
+ if (matchedText) {
12
+ return {
13
+ consumed: matchedText.length,
14
+ token: {
15
+ tokenType: tokenType,
16
+ value: matchedText
17
+ }
18
+ };
19
+ }
21
20
  }
21
+ return false;
22
22
  };
23
23
  }
24
24
  exports.createTokenPatternFromRegExp = createTokenPatternFromRegExp;
@@ -1 +1 @@
1
- {"version":3,"file":"create-token-pattern-from-regexp.js","sourceRoot":"","sources":["../src/create-token-pattern-from-regexp.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAGrD,SAAgB,4BAA4B,CAC1C,SAA6B,EAC7B,MAAc;IAEd,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAE1D,OAAO,CAAC,IAAY,EAAsC,EAAE;QAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,IAAA,kBAAQ,EAAC,MAAM,CAAC,EAAE;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;YAC5B,OAAO;gBACL,QAAQ,EAAE,WAAW,CAAC,MAAM;gBAC5B,KAAK,EAAE;oBACL,SAAS,EAAE,SAAS;oBACpB,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"}
1
+ {"version":3,"file":"create-token-pattern-from-regexp.js","sourceRoot":"","sources":["../src/create-token-pattern-from-regexp.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAGrD,SAAgB,4BAA4B,CAC1C,SAA6B,EAC7B,MAAc;IAEd,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAE1D,OAAO,CAAC,IAAY,EAAsC,EAAE;QAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,IAAA,kBAAQ,EAAC,MAAM,CAAC,EAAE;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;YAE5B,IAAI,WAAW,EAAE;gBACf,OAAO;oBACL,QAAQ,EAAE,WAAW,CAAC,MAAM;oBAC5B,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS;wBACpB,KAAK,EAAE,WAAW;qBACnB;iBACF,CAAA;aACF;SACF;QAED,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAxBD,oEAwBC;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"}
@@ -4,8 +4,8 @@ exports.createUnaryOperatorExpressionNodePattern = void 0;
4
4
  const prelude_1 = require("@blackglory/prelude");
5
5
  const match_sequence_1 = require("./match-sequence");
6
6
  function createUnaryOperatorExpressionNodePattern({ leftTokenType, nodeType, rightNodePattern }) {
7
- return async (tokens) => {
8
- const matches = await (0, match_sequence_1.matchSequence)([
7
+ return tokens => {
8
+ const matches = (0, match_sequence_1.matchSequence)([
9
9
  leftTokenType,
10
10
  rightNodePattern
11
11
  ], tokens);
@@ -1 +1 @@
1
- {"version":3,"file":"create-unary-operator-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-unary-operator-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAUhD,SAAgB,wCAAwC,CAItD,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAI5C;IAIC,OAAO,KAAK,EAAC,MAAM,EAAC,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EACjC;YACE,aAAa;YACb,gBAAmD;SACpD,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YACvC,OAAO;gBACL,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ;gBACjC,IAAI,EAAE;oBACJ,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,UAAU,CAAC,IAAiB;iBACpC;aACF,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AA/BD,4FA+BC"}
1
+ {"version":3,"file":"create-unary-operator-expression-node-pattern.js","sourceRoot":"","sources":["../src/create-unary-operator-expression-node-pattern.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,qDAAgD;AAUhD,SAAgB,wCAAwC,CAItD,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAI5C;IAIC,OAAO,MAAM,CAAC,EAAE;QACd,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B;YACE,aAAa;YACb,gBAAmD;SACpD,EACD,MAAM,CACP,CAAA;QACD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;YACvC,OAAO;gBACL,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ;gBACjC,IAAI,EAAE;oBACJ,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,UAAU,CAAC,IAAiB;iBACpC;aACF,CAAA;SACF;IACH,CAAC,CAAA;AACH,CAAC;AA/BD,4FA+BC"}
@@ -1,3 +1,3 @@
1
1
  import { Falsy } from '@blackglory/prelude';
2
2
  import { IToken, INode, INodePattern, INodePatternMatch } from './types';
3
- export declare function matchAnyOf<Token extends IToken = IToken, Node extends INode = INode>(nodePatterns: ReadonlyArray<INodePattern<Token, Node>>, tokens: ReadonlyArray<Token>): Promise<INodePatternMatch<Node> | Falsy>;
3
+ export declare function matchAnyOf<Token extends IToken = IToken, Node extends INode = INode>(nodePatterns: ReadonlyArray<INodePattern<Token, Node>>, tokens: ReadonlyArray<Token>): INodePatternMatch<Node> | Falsy;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchAnyOf = void 0;
4
4
  const prelude_1 = require("@blackglory/prelude");
5
- async function matchAnyOf(nodePatterns, tokens) {
5
+ function matchAnyOf(nodePatterns, tokens) {
6
6
  for (const pattern of nodePatterns) {
7
- const match = await pattern(tokens);
7
+ const match = pattern(tokens);
8
8
  if ((0, prelude_1.isntFalsy)(match)) {
9
9
  return match;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"match-any-of.js","sourceRoot":"","sources":["../src/match-any-of.ts"],"names":[],"mappings":";;;AAAA,iDAAsD;AAM/C,KAAK,UAAU,UAAU,CAI9B,YAAsD,EACtD,MAA4B;IAE5B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,EAAE;YACpB,OAAO,KAAK,CAAA;SACb;KACF;AACH,CAAC;AAbD,gCAaC"}
1
+ {"version":3,"file":"match-any-of.js","sourceRoot":"","sources":["../src/match-any-of.ts"],"names":[],"mappings":";;;AAAA,iDAAsD;AAMtD,SAAgB,UAAU,CAIxB,YAAsD,EACtD,MAA4B;IAE5B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7B,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,EAAE;YACpB,OAAO,KAAK,CAAA;SACb;KACF;AACH,CAAC;AAbD,gCAaC"}
@@ -3,4 +3,4 @@ import { IToken, INode, MapSequenceToPatterns, INodePatternMatch } from './types
3
3
  export declare function matchRepetitions<Sequence extends ReadonlyArray<Token | Node>, Token extends IToken = IToken, Node extends INode = INode>(patterns: MapSequenceToPatterns<Sequence, Token, Node>, tokens: ReadonlyArray<Token>, { minimumRepetitions, maximumRepetitions }?: {
4
4
  minimumRepetitions?: number;
5
5
  maximumRepetitions?: number;
6
- }): Promise<Array<Token | INodePatternMatch<Node>> | Falsy>;
6
+ }): Array<Token | INodePatternMatch<Node>> | Falsy;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchRepetitions = void 0;
4
4
  const prelude_1 = require("@blackglory/prelude");
5
5
  const match_sequence_1 = require("./match-sequence");
6
- async function matchRepetitions(patterns, tokens, { minimumRepetitions = 1, maximumRepetitions = Infinity } = {}) {
6
+ function matchRepetitions(patterns, tokens, { minimumRepetitions = 1, maximumRepetitions = Infinity } = {}) {
7
7
  (0, prelude_1.assert)(Number.isInteger(minimumRepetitions), 'The minimum repetiions must be an integer');
8
8
  (0, prelude_1.assert)(minimumRepetitions >= 0, 'The minimum repetitions must be greater than or equal to 0');
9
9
  (0, prelude_1.assert)(Number.isInteger(maximumRepetitions) || maximumRepetitions === Infinity, 'The maxmium repetiions must be an integer or an Infinity');
@@ -11,7 +11,7 @@ async function matchRepetitions(patterns, tokens, { minimumRepetitions = 1, maxi
11
11
  const results = [];
12
12
  const mutableTokens = (0, prelude_1.toArray)(tokens);
13
13
  for (let i = 0; i < minimumRepetitions; i++) {
14
- const matches = await (0, match_sequence_1.matchSequence)(patterns, mutableTokens);
14
+ const matches = (0, match_sequence_1.matchSequence)(patterns, mutableTokens);
15
15
  if ((0, prelude_1.isntFalsy)(matches)) {
16
16
  handleMatches(matches);
17
17
  }
@@ -20,7 +20,7 @@ async function matchRepetitions(patterns, tokens, { minimumRepetitions = 1, maxi
20
20
  }
21
21
  }
22
22
  for (let i = minimumRepetitions; i < maximumRepetitions; i++) {
23
- const matches = await (0, match_sequence_1.matchSequence)(patterns, mutableTokens);
23
+ const matches = (0, match_sequence_1.matchSequence)(patterns, mutableTokens);
24
24
  if ((0, prelude_1.isntFalsy)(matches)) {
25
25
  handleMatches(matches);
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"match-repetitions.js","sourceRoot":"","sources":["../src/match-repetitions.ts"],"names":[],"mappings":";;;AAAA,iDAAuE;AAEvE,qDAAgD;AAEzC,KAAK,UAAU,gBAAgB,CAKpC,QAAsD,EACtD,MAA4B,EAC5B,EACE,kBAAkB,GAAG,CAAC,EACtB,kBAAkB,GAAG,QAAQ,KAI3B,EAAE;IAEN,IAAA,gBAAM,EAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,2CAA2C,CAAC,CAAA;IACzF,IAAA,gBAAM,EACJ,kBAAkB,IAAI,CAAC,EACvB,4DAA4D,CAC7D,CAAA;IACD,IAAA,gBAAM,EACJ,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,KAAK,QAAQ,EACvE,0DAA0D,CAC3D,CAAA;IACD,IAAA,gBAAM,EACJ,kBAAkB,IAAI,kBAAkB,EACxC,kFAAkF,CACnF,CAAA;IAED,MAAM,OAAO,GAA2C,EAAE,CAAA;IAC1D,MAAM,aAAa,GAAG,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAA;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAC5D,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,aAAa,CAAC,OAAO,CAAC,CAAA;SACvB;aAAM;YACL,OAAM;SACP;KACF;IAED,KAAK,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAC5D,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,aAAa,CAAC,OAAO,CAAC,CAAA;SACvB;aAAM;YACL,MAAK;SACN;KACF;IAED,OAAO,OAAO,CAAA;IAEd,SAAS,aAAa,CACpB,OAAoD;QAEpD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;QACxB,aAAa,CAAC,MAAM,CAClB,CAAC,EACD,WAAW,CAAC,OAAiD,CAAC,CAC/D,CAAA;IACH,CAAC;AACH,CAAC;AA7DD,4CA6DC;AAED,SAAS,WAAW,CAAC,OAAiD;IACpE,OAAO,OAAO;SACX,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;AACpC,CAAC"}
1
+ {"version":3,"file":"match-repetitions.js","sourceRoot":"","sources":["../src/match-repetitions.ts"],"names":[],"mappings":";;;AAAA,iDAAuE;AAEvE,qDAAgD;AAEhD,SAAgB,gBAAgB,CAK9B,QAAsD,EACtD,MAA4B,EAC5B,EACE,kBAAkB,GAAG,CAAC,EACtB,kBAAkB,GAAG,QAAQ,KAI3B,EAAE;IAEN,IAAA,gBAAM,EAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,2CAA2C,CAAC,CAAA;IACzF,IAAA,gBAAM,EACJ,kBAAkB,IAAI,CAAC,EACvB,4DAA4D,CAC7D,CAAA;IACD,IAAA,gBAAM,EACJ,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,KAAK,QAAQ,EACvE,0DAA0D,CAC3D,CAAA;IACD,IAAA,gBAAM,EACJ,kBAAkB,IAAI,kBAAkB,EACxC,kFAAkF,CACnF,CAAA;IAED,MAAM,OAAO,GAA2C,EAAE,CAAA;IAC1D,MAAM,aAAa,GAAG,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAA;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAA,8BAAa,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QACtD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,aAAa,CAAC,OAAO,CAAC,CAAA;SACvB;aAAM;YACL,OAAM;SACP;KACF;IAED,KAAK,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAA,8BAAa,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QACtD,IAAI,IAAA,mBAAS,EAAC,OAAO,CAAC,EAAE;YACtB,aAAa,CAAC,OAAO,CAAC,CAAA;SACvB;aAAM;YACL,MAAK;SACN;KACF;IAED,OAAO,OAAO,CAAA;IAEd,SAAS,aAAa,CACpB,OAAoD;QAEpD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;QACxB,aAAa,CAAC,MAAM,CAClB,CAAC,EACD,WAAW,CAAC,OAAiD,CAAC,CAC/D,CAAA;IACH,CAAC;AACH,CAAC;AA7DD,4CA6DC;AAED,SAAS,WAAW,CAAC,OAAiD;IACpE,OAAO,OAAO;SACX,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;AACpC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { NonEmptyArray, Falsy } from '@blackglory/prelude';
2
2
  import { IToken, INode, INodePattern, MapSequenceToPatterns, MapSequenceToMatches } from './types';
3
- export declare function matchSequence<Sequence extends ReadonlyArray<Token | Node>, Token extends IToken = IToken, Node extends INode = INode>(patterns: MapSequenceToPatterns<Sequence, Token, Node>, tokens: ReadonlyArray<Token>): Promise<MapSequenceToMatches<Sequence, Token, Node> | Falsy>;
3
+ export declare function matchSequence<Sequence extends ReadonlyArray<Token | Node>, Token extends IToken = IToken, Node extends INode = INode>(patterns: MapSequenceToPatterns<Sequence, Token, Node>, tokens: ReadonlyArray<Token>): MapSequenceToMatches<Sequence, Token, Node> | Falsy;
4
4
  declare type SubPatterns<Token extends IToken = IToken, Node extends INode = INode> = [INodePattern<Token, Node>, string] | NonEmptyArray<string> | NonEmptyArray<INodePattern<Token, Node>>;
5
5
  export declare function splitPatterns<Sequence extends ReadonlyArray<Token | Node>, Token extends IToken = IToken, Node extends INode = INode>(patterns: MapSequenceToPatterns<Sequence, Token, Node>): IterableIterator<SubPatterns<Token, Node>>;
6
6
  export {};
@@ -5,7 +5,7 @@ const prelude_1 = require("@blackglory/prelude");
5
5
  const iterable_operator_1 = require("iterable-operator");
6
6
  const consume_token_1 = require("./consume-token");
7
7
  const consume_node_1 = require("./consume-node");
8
- async function matchSequence(patterns, tokens) {
8
+ function matchSequence(patterns, tokens) {
9
9
  if (isTokenTypes(patterns)) {
10
10
  const matches = [];
11
11
  const mutableTokens = (0, prelude_1.toArray)(tokens);
@@ -24,7 +24,7 @@ async function matchSequence(patterns, tokens) {
24
24
  const matches = [];
25
25
  const mutableTokens = (0, prelude_1.toArray)(tokens);
26
26
  for (const pattern of patterns) {
27
- const match = await (0, consume_node_1.consumeNode)(pattern, mutableTokens);
27
+ const match = (0, consume_node_1.consumeNode)(pattern, mutableTokens);
28
28
  if ((0, prelude_1.isntFalsy)(match)) {
29
29
  matches.push(match);
30
30
  }
@@ -38,7 +38,7 @@ async function matchSequence(patterns, tokens) {
38
38
  const [nodePattern, tokenType] = patterns;
39
39
  for (const indexOfToken of (0, iterable_operator_1.findAllIndexes)(tokens, x => x.tokenType === tokenType)) {
40
40
  const leftTokens = tokens.slice(0, indexOfToken);
41
- const leftMatch = await nodePattern(leftTokens);
41
+ const leftMatch = nodePattern(leftTokens);
42
42
  if ((0, prelude_1.isntFalsy)(leftMatch) &&
43
43
  leftMatch.consumed === indexOfToken) {
44
44
  const matches = [
@@ -53,7 +53,7 @@ async function matchSequence(patterns, tokens) {
53
53
  const matches = [];
54
54
  const remainingTokens = (0, prelude_1.toArray)(tokens);
55
55
  for (const subPatterns of splitPatterns(patterns)) {
56
- const subMatches = await matchSequence(subPatterns, remainingTokens);
56
+ const subMatches = matchSequence(subPatterns, remainingTokens);
57
57
  if ((0, prelude_1.isntFalsy)(subMatches)) {
58
58
  const consumed = subMatches
59
59
  .map((match) => {
@@ -1 +1 @@
1
- {"version":3,"file":"match-sequence.js","sourceRoot":"","sources":["../src/match-sequence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"match-sequence.js","sourceRoot":"","sources":["../src/match-sequence.ts"],"names":[],"mappings":"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"}
package/lib/parse.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import { IToken, INodePattern, INode } from './types';
2
- export declare function parse<Token extends IToken = IToken, Node extends INode = INode>(patterns: Array<INodePattern<Token, Node>>, tokens: Token[]): AsyncIterableIterator<Node>;
2
+ export declare function parse<Token extends IToken = IToken, Node extends INode = INode>(patterns: Array<INodePattern<Token, Node>>, tokens: Token[]): IterableIterator<Node>;
package/lib/parse.js CHANGED
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parse = void 0;
4
- const prelude_1 = require("@blackglory/prelude");
5
- async function* parse(patterns, tokens) {
4
+ function* parse(patterns, tokens) {
6
5
  let i = 0;
7
6
  loop: while (i < tokens.length) {
8
7
  const remainingTokens = tokens.slice(i);
9
8
  for (const pattern of patterns) {
10
- const result = await pattern(remainingTokens);
11
- if ((0, prelude_1.isntFalsy)(result)) {
9
+ const result = pattern(remainingTokens);
10
+ if (result) {
12
11
  yield result.node;
13
12
  i += result.consumed;
14
13
  continue loop;
package/lib/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAGxC,KAAK,SAAS,CAAC,CAAC,KAAK,CAI1B,QAA0C,EAC1C,MAAe;IAEf,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,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;YAC7C,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,uBAAuB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;KAC1E;AACH,CAAC;AAtBD,sBAsBC"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AAEA,QAAe,CAAC,CAAC,KAAK,CAIpB,QAA0C,EAC1C,MAAe;IAEf,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,MAAM,EAAE;gBACV,MAAM,MAAM,CAAC,IAAI,CAAA;gBACjB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAA;gBACpB,SAAS,IAAI,CAAA;aACd;SACF;QAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;KAC1E;AACH,CAAC;AAtBD,sBAsBC"}
package/lib/tokenize.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import { ITokenPattern, IToken } from './types';
2
- export declare function tokenize<Token extends IToken = IToken>(patterns: Array<ITokenPattern<Token>>, text: string): AsyncIterableIterator<Token>;
2
+ export declare function tokenize<Token extends IToken = IToken>(patterns: Array<ITokenPattern<Token>>, text: string): IterableIterator<Token>;
package/lib/tokenize.js CHANGED
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tokenize = void 0;
4
- const prelude_1 = require("@blackglory/prelude");
5
- async function* tokenize(patterns, text) {
4
+ function* tokenize(patterns, text) {
6
5
  let i = 0;
7
6
  loop: while (i < text.length) {
8
7
  const remainingText = text.slice(i);
9
8
  for (const pattern of patterns) {
10
- const result = await pattern(remainingText);
11
- if ((0, prelude_1.isntFalsy)(result)) {
9
+ const result = pattern(remainingText);
10
+ if (result) {
12
11
  yield result.token;
13
12
  i += result.consumed;
14
13
  continue loop;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAGxC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,QAAqC,EACrC,IAAY;IAEZ,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,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;YAC3C,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;AAnBD,4BAmBC"}
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":";;;AAEA,QAAe,CAAC,CAAC,QAAQ,CACvB,QAAqC,EACrC,IAAY;IAEZ,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,MAAM,EAAE;gBACV,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;AAnBD,4BAmBC"}
package/lib/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Falsy, Awaitable } from '@blackglory/prelude';
1
+ import { Falsy } from '@blackglory/prelude';
2
2
  export interface IToken {
3
3
  tokenType: string;
4
4
  value: string;
@@ -15,10 +15,10 @@ export interface INodePatternMatch<Node extends INode> {
15
15
  node: Node;
16
16
  }
17
17
  export interface ITokenPattern<Token extends IToken = IToken> {
18
- (text: string): Awaitable<ITokenPatternMatch<Token> | Falsy>;
18
+ (text: string): ITokenPatternMatch<Token> | Falsy;
19
19
  }
20
20
  export interface INodePattern<Token extends IToken = IToken, Node extends INode = INode> {
21
- (tokens: ReadonlyArray<Token>): Awaitable<INodePatternMatch<Node> | Falsy>;
21
+ (tokens: ReadonlyArray<Token>): INodePatternMatch<Node> | Falsy;
22
22
  }
23
23
  export declare type MapSequenceToPatterns<Sequence extends ReadonlyArray<Token | Node>, Token extends IToken = IToken, Node extends INode = INode> = {
24
24
  [Index in keyof Sequence]: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extra-parser",
3
- "version": "0.6.6",
3
+ "version": "0.7.1",
4
4
  "description": "A functional parser toolkit",
5
5
  "keywords": [],
6
6
  "files": [
@@ -1,4 +1,4 @@
1
- import { Falsy, isntFalsy } from '@blackglory/prelude'
1
+ import { Falsy } from '@blackglory/prelude'
2
2
  import { IToken, INode, INodePattern, INodePatternMatch } from './types'
3
3
 
4
4
  /**
@@ -6,16 +6,16 @@ import { IToken, INode, INodePattern, INodePatternMatch } from './types'
6
6
  *
7
7
  * @param tokens 匹配成功时会发生原地修改
8
8
  */
9
- export async function consumeNode<
9
+ export function consumeNode<
10
10
  Token extends IToken = IToken
11
11
  , Node extends INode = INode
12
12
  >(
13
13
  nodePattern: INodePattern<Token, Node>
14
14
  , tokens: Token[]
15
- ): Promise<INodePatternMatch<Node> | Falsy> {
16
- const match = await nodePattern(tokens)
15
+ ): INodePatternMatch<Node> | Falsy {
16
+ const match = nodePattern(tokens)
17
17
 
18
- if (isntFalsy(match)) {
18
+ if (match) {
19
19
  tokens.splice(0, match.consumed)
20
20
  return match
21
21
  }
@@ -26,8 +26,8 @@ export function createBinaryOperatorExpressionNodePattern<
26
26
  Token
27
27
  , IBinaryOperatorExpressionNode<Node['nodeType'], Node['left'], Node['right']>
28
28
  > {
29
- return async tokens => {
30
- const matches = await matchSequence<[INode, IToken, INode]>(
29
+ return tokens => {
30
+ const matches = matchSequence<[INode, IToken, INode]>(
31
31
  [
32
32
  leftNodePattern as INodePattern<IToken, LeftNode>
33
33
  , centerTokenType
@@ -10,8 +10,8 @@ export function createGroupedExpressionNodePattern<
10
10
  rightTokenType: string
11
11
  centerNodePattern: INodePattern<Token, CenterNode>
12
12
  }): INodePattern<Token, CenterNode> {
13
- return async tokens => {
14
- const matches = await matchSequence<[IToken, INode, IToken]>(
13
+ return tokens => {
14
+ const matches = matchSequence<[IToken, INode, IToken]>(
15
15
  [
16
16
  leftTokenType
17
17
  , centerNodePattern as INodePattern<IToken, CenterNode>
@@ -11,16 +11,19 @@ export function createTokenPatternFromRegExp<Token extends IToken>(
11
11
  const result = startsWithRegExp.exec(text)
12
12
  if (isntNull(result)) {
13
13
  const [matchedText] = result
14
- return {
15
- consumed: matchedText.length
16
- , token: {
17
- tokenType: tokenType
18
- , value: matchedText
14
+
15
+ if (matchedText) {
16
+ return {
17
+ consumed: matchedText.length
18
+ , token: {
19
+ tokenType: tokenType
20
+ , value: matchedText
21
+ }
19
22
  }
20
23
  }
21
- } else {
22
- return false
23
24
  }
25
+
26
+ return false
24
27
  }
25
28
  }
26
29
 
@@ -22,8 +22,8 @@ export function createUnaryOperatorExpressionNodePattern<
22
22
  Token
23
23
  , IUnaryOperatorExpressionNode<Node['nodeType'], Node['right']>
24
24
  > {
25
- return async tokens => {
26
- const matches = await matchSequence<[IToken, INode]>(
25
+ return tokens => {
26
+ const matches = matchSequence<[IToken, INode]>(
27
27
  [
28
28
  leftTokenType
29
29
  , rightNodePattern as INodePattern<IToken, RightNode>
@@ -4,15 +4,15 @@ import { IToken, INode, INodePattern, INodePatternMatch } from './types'
4
4
  /**
5
5
  * 从多个模式中依序匹配, 直到有一个匹配结果为真值, 返回该真值.
6
6
  */
7
- export async function matchAnyOf<
7
+ export function matchAnyOf<
8
8
  Token extends IToken = IToken
9
9
  , Node extends INode = INode
10
10
  >(
11
11
  nodePatterns: ReadonlyArray<INodePattern<Token, Node>>
12
12
  , tokens: ReadonlyArray<Token>
13
- ): Promise<INodePatternMatch<Node> | Falsy> {
13
+ ): INodePatternMatch<Node> | Falsy {
14
14
  for (const pattern of nodePatterns) {
15
- const match = await pattern(tokens)
15
+ const match = pattern(tokens)
16
16
  if (isntFalsy(match)) {
17
17
  return match
18
18
  }
@@ -2,7 +2,7 @@ import { assert, Falsy, isntFalsy, toArray } from '@blackglory/prelude'
2
2
  import { IToken, INode, MapSequenceToPatterns, MapSequenceToMatches, INodePatternMatch } from './types'
3
3
  import { matchSequence } from './match-sequence'
4
4
 
5
- export async function matchRepetitions<
5
+ export function matchRepetitions<
6
6
  Sequence extends ReadonlyArray<Token | Node>
7
7
  , Token extends IToken = IToken
8
8
  , Node extends INode = INode
@@ -16,7 +16,7 @@ export async function matchRepetitions<
16
16
  minimumRepetitions?: number
17
17
  maximumRepetitions?: number
18
18
  } = {}
19
- ): Promise<Array<Token | INodePatternMatch<Node>> | Falsy> {
19
+ ): Array<Token | INodePatternMatch<Node>> | Falsy {
20
20
  assert(Number.isInteger(minimumRepetitions), 'The minimum repetiions must be an integer')
21
21
  assert(
22
22
  minimumRepetitions >= 0
@@ -35,7 +35,7 @@ export async function matchRepetitions<
35
35
  const mutableTokens = toArray(tokens)
36
36
 
37
37
  for (let i = 0; i < minimumRepetitions; i++) {
38
- const matches = await matchSequence(patterns, mutableTokens)
38
+ const matches = matchSequence(patterns, mutableTokens)
39
39
  if (isntFalsy(matches)) {
40
40
  handleMatches(matches)
41
41
  } else {
@@ -44,7 +44,7 @@ export async function matchRepetitions<
44
44
  }
45
45
 
46
46
  for (let i = minimumRepetitions; i < maximumRepetitions; i++) {
47
- const matches = await matchSequence(patterns, mutableTokens)
47
+ const matches = matchSequence(patterns, mutableTokens)
48
48
  if (isntFalsy(matches)) {
49
49
  handleMatches(matches)
50
50
  } else {
@@ -27,14 +27,14 @@ import { consumeNode } from './consume-node'
27
27
  * 这种子模式适用于二元或三元运算符这样的规则.
28
28
  * 在引擎盖下, 它首先匹配TokenType以防止NodePattern在匹配时陷入死循环.
29
29
  */
30
- export async function matchSequence<
30
+ export function matchSequence<
31
31
  Sequence extends ReadonlyArray<Token | Node>
32
32
  , Token extends IToken = IToken
33
33
  , Node extends INode = INode
34
34
  >(
35
35
  patterns: MapSequenceToPatterns<Sequence, Token, Node>
36
36
  , tokens: ReadonlyArray<Token>
37
- ): Promise<MapSequenceToMatches<Sequence, Token, Node> | Falsy> {
37
+ ): MapSequenceToMatches<Sequence, Token, Node> | Falsy {
38
38
  if (isTokenTypes(patterns)) {
39
39
  const matches: Array<Token> = []
40
40
 
@@ -54,7 +54,7 @@ export async function matchSequence<
54
54
 
55
55
  const mutableTokens = toArray(tokens)
56
56
  for (const pattern of patterns) {
57
- const match = await consumeNode(pattern, mutableTokens)
57
+ const match = consumeNode(pattern, mutableTokens)
58
58
  if (isntFalsy(match)) {
59
59
  matches.push(match)
60
60
  } else {
@@ -70,7 +70,7 @@ export async function matchSequence<
70
70
  const indexOfToken of findAllIndexes(tokens, x => x.tokenType === tokenType)
71
71
  ) {
72
72
  const leftTokens = tokens.slice(0, indexOfToken)
73
- const leftMatch = await nodePattern(leftTokens)
73
+ const leftMatch = nodePattern(leftTokens)
74
74
  if (
75
75
  isntFalsy(leftMatch) &&
76
76
  leftMatch.consumed === indexOfToken
@@ -86,7 +86,7 @@ export async function matchSequence<
86
86
  const matches: Array<INodePatternMatch<Node> | Token> = []
87
87
  const remainingTokens = toArray(tokens)
88
88
  for (const subPatterns of splitPatterns(patterns)) {
89
- const subMatches = await matchSequence(
89
+ const subMatches = matchSequence(
90
90
  subPatterns as MapSequenceToPatterns<Sequence, Token, Node>
91
91
  , remainingTokens
92
92
  )
package/src/parse.ts CHANGED
@@ -1,20 +1,19 @@
1
- import { isntFalsy } from '@blackglory/prelude'
2
1
  import { IToken, INodePattern, INode } from './types'
3
2
 
4
- export async function* parse<
3
+ export function* parse<
5
4
  Token extends IToken = IToken
6
5
  , Node extends INode = INode
7
6
  >(
8
7
  patterns: Array<INodePattern<Token, Node>>
9
8
  , tokens: Token[]
10
- ): AsyncIterableIterator<Node> {
9
+ ): IterableIterator<Node> {
11
10
  let i = 0
12
11
  loop: while (i < tokens.length) {
13
12
  const remainingTokens = tokens.slice(i)
14
13
 
15
14
  for (const pattern of patterns) {
16
- const result = await pattern(remainingTokens)
17
- if (isntFalsy(result)) {
15
+ const result = pattern(remainingTokens)
16
+ if (result) {
18
17
  yield result.node
19
18
  i += result.consumed
20
19
  continue loop
package/src/tokenize.ts CHANGED
@@ -1,17 +1,16 @@
1
- import { isntFalsy } from '@blackglory/prelude'
2
1
  import { ITokenPattern, IToken } from './types'
3
2
 
4
- export async function* tokenize<Token extends IToken = IToken>(
3
+ export function* tokenize<Token extends IToken = IToken>(
5
4
  patterns: Array<ITokenPattern<Token>>
6
5
  , text: string
7
- ): AsyncIterableIterator<Token> {
6
+ ): IterableIterator<Token> {
8
7
  let i = 0
9
8
  loop: while (i < text.length) {
10
9
  const remainingText = text.slice(i)
11
10
 
12
11
  for (const pattern of patterns) {
13
- const result = await pattern(remainingText)
14
- if (isntFalsy(result)) {
12
+ const result = pattern(remainingText)
13
+ if (result) {
15
14
  yield result.token
16
15
  i += result.consumed
17
16
  continue loop
package/src/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Falsy, Awaitable } from '@blackglory/prelude'
1
+ import { Falsy } from '@blackglory/prelude'
2
2
 
3
3
  export interface IToken {
4
4
  tokenType: string
@@ -20,14 +20,14 @@ export interface INodePatternMatch<Node extends INode> {
20
20
  }
21
21
 
22
22
  export interface ITokenPattern<Token extends IToken = IToken> {
23
- (text: string): Awaitable<ITokenPatternMatch<Token> | Falsy>
23
+ (text: string): ITokenPatternMatch<Token> | Falsy
24
24
  }
25
25
 
26
26
  export interface INodePattern<
27
27
  Token extends IToken = IToken
28
28
  , Node extends INode = INode
29
29
  > {
30
- (tokens: ReadonlyArray<Token>): Awaitable<INodePatternMatch<Node> | Falsy>
30
+ (tokens: ReadonlyArray<Token>): INodePatternMatch<Node> | Falsy
31
31
  }
32
32
 
33
33
  export type MapSequenceToPatterns<