allang-compiler-base 0.0.1 → 0.0.2
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/core/parser/grammar.d.ts +18 -8
- package/dist/core/parser/grammar.d.ts.map +1 -1
- package/dist/core/parser/grammar.js +33 -1
- package/dist/core/parser/grammar.js.map +1 -1
- package/dist/core/pre/index.d.ts +1 -1
- package/dist/core/pre/index.d.ts.map +1 -1
- package/dist/core/pre/index.js +1 -1
- package/dist/core/pre/index.js.map +1 -1
- package/dist/core/pre/segment.d.ts.map +1 -1
- package/dist/core/pre/segment.js +9 -4
- package/dist/core/pre/segment.js.map +1 -1
- package/dist/core/test.js.map +1 -1
- package/index.js +6 -3
- package/index.ts +6 -3
- package/package.json +1 -1
- package/src/core/parser/grammar.ts +38 -9
- package/src/core/pre/index.ts +2 -1
- package/src/core/pre/segment.ts +9 -4
- package/src/core/test.ts +2 -1
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
import { token
|
|
1
|
+
import { token } from '../pre';
|
|
2
2
|
import { log } from '../../base/log';
|
|
3
3
|
interface tools {
|
|
4
4
|
peek(): token;
|
|
5
5
|
now(): token;
|
|
6
6
|
next(): token;
|
|
7
|
-
match(data: token): boolean;
|
|
8
|
-
match(data: token_type): boolean;
|
|
9
7
|
backup(): void;
|
|
10
8
|
restore(): void;
|
|
9
|
+
flush(): void;
|
|
10
|
+
add(token: token): void;
|
|
11
|
+
remove(): void;
|
|
12
|
+
get(): token[];
|
|
11
13
|
}
|
|
14
|
+
declare function create_match(func: (tool: tools) => boolean, error: (log: log) => void): {
|
|
15
|
+
func: (tool: tools) => boolean;
|
|
16
|
+
error: (log: log) => void;
|
|
17
|
+
};
|
|
18
|
+
declare function root_match(tool: tools, log: log, parser: (token: token[][]) => Tree, ...match: {
|
|
19
|
+
func: ((tool: tools) => boolean);
|
|
20
|
+
error: (log: log) => void;
|
|
21
|
+
}[]): Tree;
|
|
22
|
+
declare function list_match(tool: tools, log: log, parser: (token: token[][]) => Tree, v?: (log: log, token: token[]) => void, ...match: {
|
|
23
|
+
func: ((tool: tools) => boolean);
|
|
24
|
+
error: (log: log) => void;
|
|
25
|
+
}[]): Tree;
|
|
12
26
|
declare class Tree {
|
|
13
27
|
}
|
|
14
|
-
|
|
15
|
-
match(tool: tools, log: log): boolean;
|
|
16
|
-
tree(): Tree;
|
|
17
|
-
}
|
|
18
|
-
export { tools, grammar, Tree };
|
|
28
|
+
export { tools, Tree, list_match, root_match, create_match };
|
|
19
29
|
//# sourceMappingURL=grammar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../../src/core/parser/grammar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../../src/core/parser/grammar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,QAAQ,CAAA;AAC5B,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAA;AAElC,UAAU,KAAK;IACX,IAAI,IAAG,KAAK,CAAA;IACZ,GAAG,IAAG,KAAK,CAAA;IACX,IAAI,IAAG,KAAK,CAAA;IACZ,MAAM,IAAG,IAAI,CAAA;IACb,OAAO,IAAG,IAAI,CAAA;IACd,KAAK,IAAG,IAAI,CAAA;IACZ,GAAG,CAAC,KAAK,EAAC,KAAK,GAAE,IAAI,CAAA;IACrB,MAAM,IAAG,IAAI,CAAA;IACb,GAAG,IAAG,KAAK,EAAE,CAAA;CAChB;AACD,iBAAS,YAAY,CAAC,IAAI,EAAC,CAAC,IAAI,EAAC,KAAK,KAAG,OAAO,EAAC,KAAK,EAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,GAAE;IAAC,IAAI,EAAC,CAAC,IAAI,EAAC,KAAK,KAAG,OAAO,CAAC;IAChG,KAAK,EAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,CAAA;CAAC,CAKzB;AACD,iBAAS,UAAU,CAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,GAAG,EAAC,MAAM,EAAC,CAAC,KAAK,EAAC,KAAK,EAAE,EAAE,KAAG,IAAI,EAAC,GAAG,KAAK,EAAC;IAAC,IAAI,EAAC,CAAC,CAAC,IAAI,EAAC,KAAK,KAAG,OAAO,CAAC,CACvG;IAAA,KAAK,EAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,CAAA;CAAC,EAAE,GAAE,IAAI,CAUlC;AACD,iBAAS,UAAU,CAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,GAAG,EAAC,MAAM,EAAC,CAAC,KAAK,EAAC,KAAK,EAAE,EAAE,KAAG,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,KAAK,EAAE,KAAG,IAAI,EAClF,GAAG,KAAK,EAAC;IAAC,IAAI,EAAC,CAAC,CAAC,IAAI,EAAC,KAAK,KAAG,OAAO,CAAC,CAAC;IAAA,KAAK,EAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,CAAA;CAAC,EAAE,GAAE,IAAI,CAWxF;AACD,cAAM,IAAI;CACT;AACD,OAAO,EAAC,KAAK,EAAC,IAAI,EAAC,UAAU,EAAC,UAAU,EAAC,YAAY,EAAC,CAAA"}
|
|
@@ -1,4 +1,36 @@
|
|
|
1
|
+
function create_match(func, error) {
|
|
2
|
+
return {
|
|
3
|
+
func: func,
|
|
4
|
+
error: error
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function root_match(tool, log, parser, ...match) {
|
|
8
|
+
let matches = [];
|
|
9
|
+
for (let i = 0; i < match.length; i++) {
|
|
10
|
+
if (!match[i].func(tool))
|
|
11
|
+
match[i].error(log);
|
|
12
|
+
else {
|
|
13
|
+
matches.push(tool.get());
|
|
14
|
+
tool.flush();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return parser(matches);
|
|
18
|
+
}
|
|
19
|
+
function list_match(tool, log, parser, v, ...match) {
|
|
20
|
+
let matches = [];
|
|
21
|
+
for (let i = 0; i < match.length; i++) {
|
|
22
|
+
if (!match[i].func(tool))
|
|
23
|
+
match[i].error(log);
|
|
24
|
+
else {
|
|
25
|
+
matches.push(tool.get());
|
|
26
|
+
tool.flush();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (v)
|
|
30
|
+
v(log, tool.get());
|
|
31
|
+
return parser(matches);
|
|
32
|
+
}
|
|
1
33
|
class Tree {
|
|
2
34
|
}
|
|
3
|
-
export { Tree };
|
|
35
|
+
export { Tree, list_match, root_match, create_match };
|
|
4
36
|
//# sourceMappingURL=grammar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../../src/core/parser/grammar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../../src/core/parser/grammar.ts"],"names":[],"mappings":"AAcA,SAAS,YAAY,CAAC,IAA0B,EAAC,KAAqB;IAElE,OAAO;QACH,IAAI,EAAC,IAAI;QACT,KAAK,EAAC,KAAK;KACd,CAAA;AACL,CAAC;AACD,SAAS,UAAU,CAAC,IAAU,EAAC,GAAO,EAAC,MAA8B,EAAC,GAAG,KAC5C;IACzB,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,KAAK,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC;QAC5B,IAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;aACvC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACxB,IAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AACD,SAAS,UAAU,CAAC,IAAU,EAAC,GAAO,EAAC,MAA8B,EAAC,CAAgC,EAClF,GAAG,KAA4D;IAC/E,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,KAAK,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC;QAC5B,IAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;aACvC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACxB,IAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC;IACL,CAAC;IACD,IAAG,CAAC;QAAC,CAAC,CAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACtB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AACD,MAAM,IAAI;CACT;AACD,OAAO,EAAO,IAAI,EAAC,UAAU,EAAC,UAAU,EAAC,YAAY,EAAC,CAAA"}
|
package/dist/core/pre/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/pre/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/pre/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,OAAO,MAAM,WAAW,CAAA;;;;;;;;AAE/B,wBAMC;AACD,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,EAAC,IAAI,EAAC,UAAU,EAAE,KAAK,EAAC,CAAA"}
|
package/dist/core/pre/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/pre/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/pre/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,eAAe;IACX,OAAO,EAAC,OAAO;IACf,KAAK,EAAC,KAAK;IACX,UAAU,EAAC,UAAU;IACrB,IAAI,EAAC,IAAI;IACT,UAAU,EAAC,UAAU;CACxB,CAAA;AACD,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,EAAC,IAAI,EAAC,UAAU,EAAE,KAAK,EAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/core/pre/segment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAa,KAAK,
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/core/pre/segment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAa,KAAK,EAAc,IAAI,EAAC,MAAM,SAAS,CAAA;AAG3D,cAAM,OAAO;IACF,IAAI,EAAC,MAAM,EAAE,CAAA;IACb,KAAK,EAAC,IAAI,EAAE,CAAA;IACZ,KAAK,EAAC,MAAM,CAAA;IACZ,IAAI,EAAC,MAAM,CAAA;IACX,GAAG,EAAC,KAAK,EAAE,CAAA;IAClB,OAAO,CAAC,SAAS,CAAS;gBACd,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAE;IAWpC,KAAK,IAAG,MAAM;IAGd,OAAO,IAAG,KAAK,EAAE;IAyDjB,EAAE,CAAC,CAAC,EAAC,MAAM;IAGX,aAAa,IAAG,OAAO;IA2BvB,WAAW,IAAG,OAAO;IAcrB,KAAK,CAAC,CAAC,EAAC,IAAI,GAAE,OAAO;CASxB;AACD,eAAe,OAAO,CAAA"}
|
package/dist/core/pre/segment.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 进行预分词
|
|
3
3
|
* 之后会被进一步加工成可用token
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { match_type, token, token_type } from './model';
|
|
6
6
|
import { match } from './match';
|
|
7
7
|
class segment {
|
|
8
8
|
constructor(code, words) {
|
|
@@ -29,10 +29,15 @@ class segment {
|
|
|
29
29
|
this.line++;
|
|
30
30
|
continue;
|
|
31
31
|
}
|
|
32
|
-
if (this.code[this.index] == ' ') {
|
|
32
|
+
if (this.code[this.index] == ' ' || this.code[this.index] == '\t') {
|
|
33
33
|
this.ret.push(new token(' ', token_type.space, this.lines()));
|
|
34
34
|
while (this.is(this.index)) {
|
|
35
|
-
if (
|
|
35
|
+
if (this.code[this.index] == '\n') {
|
|
36
|
+
this.index++;
|
|
37
|
+
this.line++;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!((this.code[this.index] == ' ' || this.code[this.index] == '\t')))
|
|
36
41
|
break;
|
|
37
42
|
this.index++;
|
|
38
43
|
}
|
|
@@ -73,7 +78,7 @@ class segment {
|
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
|
-
return this.ret;
|
|
81
|
+
return this.ret.filter((v) => v.type != token_type.space);
|
|
77
82
|
}
|
|
78
83
|
is(i) {
|
|
79
84
|
return i >= 0 && i < this.code.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment.js","sourceRoot":"","sources":["../../../src/core/pre/segment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,UAAU,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"segment.js","sourceRoot":"","sources":["../../../src/core/pre/segment.ts"],"names":[],"mappings":"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"}
|
package/dist/core/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/core/test.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/core/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC,MAAM,OAAO,CAAA;AAEnC;;GAEG;AACH,IAAI,CAAC,GAAQ;IACT,IAAI,IAAI,CAAC,GAAG,CAAC;IACb,IAAI,IAAI,CAAC,IAAI,CAAC;IACd,IAAI,IAAI,CAAC,SAAS,CAAC;CACtB,CAAA;AACD,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA"}
|
package/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {token, token_type, word
|
|
1
|
+
import {list_match,create_match,root_match, tools, Tree} from './dist/core/parser/grammar'
|
|
2
|
+
import {segment, token, token_type, word} from './dist/core/pre'
|
|
3
3
|
import {log} from './dist/base/log'
|
|
4
|
+
|
|
4
5
|
export {
|
|
5
6
|
Tree,
|
|
6
|
-
|
|
7
|
+
list_match,
|
|
8
|
+
create_match,
|
|
9
|
+
root_match,
|
|
7
10
|
tools,
|
|
8
11
|
token,
|
|
9
12
|
token_type,
|
package/index.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {token, token_type, word
|
|
1
|
+
import {list_match,create_match,root_match, tools, Tree} from './src/core/parser/grammar'
|
|
2
|
+
import {segment, token, token_type, word} from './src/core/pre'
|
|
3
3
|
import {log} from './src/base/log'
|
|
4
|
+
|
|
4
5
|
export {
|
|
5
6
|
Tree,
|
|
6
|
-
|
|
7
|
+
list_match,
|
|
8
|
+
create_match,
|
|
9
|
+
root_match,
|
|
7
10
|
tools,
|
|
8
11
|
token,
|
|
9
12
|
token_type,
|
package/package.json
CHANGED
|
@@ -1,20 +1,49 @@
|
|
|
1
|
-
import {token
|
|
1
|
+
import {token} from '../pre'
|
|
2
2
|
import {log} from '../../base/log'
|
|
3
3
|
|
|
4
4
|
interface tools{
|
|
5
5
|
peek():token
|
|
6
6
|
now():token
|
|
7
7
|
next():token
|
|
8
|
-
match(data:token):boolean
|
|
9
|
-
match(data:token_type):boolean
|
|
10
8
|
backup():void
|
|
11
9
|
restore():void
|
|
10
|
+
flush():void
|
|
11
|
+
add(token:token):void
|
|
12
|
+
remove():void
|
|
13
|
+
get():token[]
|
|
12
14
|
}
|
|
13
|
-
|
|
15
|
+
function create_match(func:(tool:tools)=>boolean,error:(log:log)=>void):{func:(tool:tools)=>boolean,
|
|
16
|
+
error:(log:log)=>void}{
|
|
17
|
+
return {
|
|
18
|
+
func:func,
|
|
19
|
+
error:error
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function root_match(tool:tools,log:log,parser:(token:token[][])=>Tree,...match:{func:((tool:tools)=>boolean)
|
|
23
|
+
,error:(log:log)=>void}[]):Tree{
|
|
24
|
+
let matches:(token[])[]=[]
|
|
25
|
+
for(let i=0;i<match.length;i++){
|
|
26
|
+
if(!match[i].func(tool))match[i].error(log)
|
|
27
|
+
else{
|
|
28
|
+
matches.push(tool.get())
|
|
29
|
+
tool.flush()
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return parser(matches)
|
|
14
33
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
34
|
+
function list_match(tool:tools,log:log,parser:(token:token[][])=>Tree,v?:(log:log,token:token[])=>void,
|
|
35
|
+
...match:{func:((tool:tools)=>boolean),error:(log:log)=>void}[]):Tree{
|
|
36
|
+
let matches:(token[])[]=[]
|
|
37
|
+
for(let i=0;i<match.length;i++){
|
|
38
|
+
if(!match[i].func(tool))match[i].error(log)
|
|
39
|
+
else{
|
|
40
|
+
matches.push(tool.get())
|
|
41
|
+
tool.flush()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if(v)v(log,tool.get())
|
|
45
|
+
return parser(matches)
|
|
46
|
+
}
|
|
47
|
+
class Tree{
|
|
19
48
|
}
|
|
20
|
-
export {tools,
|
|
49
|
+
export {tools,Tree,list_match,root_match,create_match}
|
package/src/core/pre/index.ts
CHANGED
package/src/core/pre/segment.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 进行预分词
|
|
3
3
|
* 之后会被进一步加工成可用token
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import {match_type, token, token_type, word} from './model'
|
|
6
6
|
import {match} from './match'
|
|
7
7
|
|
|
8
8
|
class segment{
|
|
@@ -36,10 +36,15 @@ class segment{
|
|
|
36
36
|
this.line++
|
|
37
37
|
continue
|
|
38
38
|
}
|
|
39
|
-
if(this.code[this.index]==' '){
|
|
39
|
+
if(this.code[this.index]==' ' || this.code[this.index]=='\t'){
|
|
40
40
|
this.ret.push(new token(' ',token_type.space,this.lines()))
|
|
41
41
|
while(this.is(this.index)){
|
|
42
|
-
if(
|
|
42
|
+
if(this.code[this.index]=='\n'){
|
|
43
|
+
this.index++
|
|
44
|
+
this.line++
|
|
45
|
+
continue
|
|
46
|
+
}
|
|
47
|
+
if(!((this.code[this.index]==' '||this.code[this.index]=='\t')))
|
|
43
48
|
break
|
|
44
49
|
this.index++
|
|
45
50
|
}
|
|
@@ -76,7 +81,7 @@ class segment{
|
|
|
76
81
|
}
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
|
-
return this.ret
|
|
84
|
+
return this.ret.filter((v)=>v.type!=token_type.space)
|
|
80
85
|
}
|
|
81
86
|
is(i:number){
|
|
82
87
|
return i>=0&&i<this.code.length
|
package/src/core/test.ts
CHANGED