yukigo-ast 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/.mocharc.json +4 -0
- package/CHANGELOG.md +10 -0
- package/dist/globals/expressions.d.ts +170 -0
- package/dist/globals/expressions.d.ts.map +1 -0
- package/dist/globals/expressions.js +260 -0
- package/dist/globals/generics.d.ts +6 -703
- package/dist/globals/generics.d.ts.map +1 -0
- package/dist/globals/generics.js +2 -1087
- package/dist/globals/operators.d.ts +5 -3
- package/dist/globals/operators.d.ts.map +1 -0
- package/dist/globals/patterns.d.ts +102 -77
- package/dist/globals/patterns.d.ts.map +1 -0
- package/dist/globals/patterns.js +152 -130
- package/dist/globals/primitives.d.ts +87 -0
- package/dist/globals/primitives.d.ts.map +1 -0
- package/dist/globals/primitives.js +130 -0
- package/dist/globals/runtime.d.ts +46 -4
- package/dist/globals/runtime.d.ts.map +1 -0
- package/dist/globals/runtime.js +26 -0
- package/dist/globals/statements.d.ts +510 -0
- package/dist/globals/statements.d.ts.map +1 -0
- package/dist/globals/statements.js +618 -0
- package/dist/globals/testing.d.ts +73 -0
- package/dist/globals/testing.d.ts.map +1 -0
- package/dist/globals/testing.js +115 -0
- package/dist/globals/types.d.ts +7 -4
- package/dist/globals/types.d.ts.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -3
- package/dist/paradigms/functional.d.ts +8 -3
- package/dist/paradigms/functional.d.ts.map +1 -0
- package/dist/paradigms/imperative.d.ts +43 -10
- package/dist/paradigms/imperative.d.ts.map +1 -0
- package/dist/paradigms/imperative.js +1 -1
- package/dist/paradigms/logic.d.ts +71 -30
- package/dist/paradigms/logic.d.ts.map +1 -0
- package/dist/paradigms/logic.js +39 -22
- package/dist/paradigms/object.d.ts +94 -30
- package/dist/paradigms/object.d.ts.map +1 -0
- package/dist/paradigms/object.js +13 -22
- package/dist/paradigms/typeclasses.d.ts +95 -0
- package/dist/paradigms/typeclasses.d.ts.map +1 -0
- package/dist/paradigms/typeclasses.js +70 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/visitor/base.d.ts +10 -0
- package/dist/visitor/base.d.ts.map +1 -0
- package/dist/visitor/base.js +8 -0
- package/dist/visitor/expressions.d.ts +60 -0
- package/dist/visitor/expressions.d.ts.map +1 -0
- package/dist/visitor/expressions.js +92 -0
- package/dist/visitor/index.d.ts +190 -0
- package/dist/visitor/index.d.ts.map +1 -0
- package/dist/visitor/index.js +26 -0
- package/dist/visitor/operations.d.ts +43 -0
- package/dist/visitor/operations.d.ts.map +1 -0
- package/dist/visitor/operations.js +47 -0
- package/dist/visitor/patterns.d.ts +35 -0
- package/dist/visitor/patterns.d.ts.map +1 -0
- package/dist/visitor/patterns.js +43 -0
- package/dist/visitor/primitives.d.ts +25 -0
- package/dist/visitor/primitives.d.ts.map +1 -0
- package/dist/visitor/primitives.js +13 -0
- package/dist/visitor/statements.d.ts +96 -0
- package/dist/visitor/statements.d.ts.map +1 -0
- package/dist/visitor/statements.js +166 -0
- package/dist/visitor/testing.d.ts +23 -0
- package/dist/visitor/testing.d.ts.map +1 -0
- package/dist/visitor/testing.js +28 -0
- package/dist/visitor/typeclasses.d.ts +15 -0
- package/dist/visitor/typeclasses.d.ts.map +1 -0
- package/dist/visitor/typeclasses.js +10 -0
- package/dist/visitor/types.d.ts +33 -0
- package/dist/visitor/types.d.ts.map +1 -0
- package/dist/visitor/types.js +44 -0
- package/package.json +9 -3
- package/src/globals/expressions.ts +339 -0
- package/src/globals/generics.ts +65 -1421
- package/src/globals/operators.ts +517 -515
- package/src/globals/patterns.ts +347 -321
- package/src/globals/primitives.ts +169 -0
- package/src/globals/runtime.ts +132 -33
- package/src/globals/statements.ts +768 -0
- package/src/globals/testing.ts +131 -0
- package/src/globals/types.ts +375 -375
- package/src/index.ts +15 -12
- package/src/paradigms/functional.ts +128 -129
- package/src/paradigms/imperative.ts +227 -232
- package/src/paradigms/logic.ts +309 -314
- package/src/paradigms/object.ts +356 -366
- package/src/paradigms/typeclasses.ts +95 -0
- package/src/visitor/base.ts +17 -0
- package/src/visitor/expressions.ts +153 -0
- package/src/visitor/index.ts +52 -0
- package/src/visitor/operations.ts +82 -0
- package/src/visitor/patterns.ts +76 -0
- package/src/visitor/primitives.ts +36 -0
- package/src/visitor/statements.ts +261 -0
- package/src/visitor/testing.ts +49 -0
- package/src/visitor/typeclasses.ts +23 -0
- package/src/visitor/types.ts +75 -0
- package/tests/ast.spec.ts +17 -0
- package/tsconfig.json +25 -22
- package/tsconfig.tsbuildinfo +1 -0
- package/dist/globals/helpers.d.ts +0 -4
- package/dist/globals/helpers.js +0 -76
- package/dist/paradigms/data.d.ts +0 -246
- package/dist/paradigms/data.js +0 -348
- package/dist/visitor.d.ts +0 -254
- package/dist/visitor.js +0 -426
- package/src/globals/helpers.ts +0 -107
- package/src/paradigms/data.ts +0 -393
- package/src/visitor.ts +0 -692
package/.mocharc.json
ADDED
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { CompositionExpression, Lambda, Application } from "../paradigms/functional.js";
|
|
2
|
+
import { Exist, Forall, Findall, Not } from "../paradigms/logic.js";
|
|
3
|
+
import { Self, New, Implement } from "../paradigms/object.js";
|
|
4
|
+
import { Visitor } from "../visitor/index.js";
|
|
5
|
+
import { ASTNode, SourceLocation } from "./generics.js";
|
|
6
|
+
import { Operation } from "./operators.js";
|
|
7
|
+
import { SymbolPrimitive, Primitive } from "./primitives.js";
|
|
8
|
+
import { Sequence, Print, For } from "./statements.js";
|
|
9
|
+
import { Assertion } from "./testing.js";
|
|
10
|
+
import { TypeCast } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Represent tuples - generic non-uniform fixed-size collection of elements
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* (1, "Hello", true)
|
|
16
|
+
* @category Expressions
|
|
17
|
+
*/
|
|
18
|
+
export declare class TupleExpression extends ASTNode {
|
|
19
|
+
/** @hidden */
|
|
20
|
+
elements: Expression[];
|
|
21
|
+
constructor(elements: Expression[], loc?: SourceLocation);
|
|
22
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
23
|
+
toJSON(): any;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fields of a data expression representations
|
|
27
|
+
* @category Expressions
|
|
28
|
+
*/
|
|
29
|
+
export declare class FieldExpression extends ASTNode {
|
|
30
|
+
/** @hidden */
|
|
31
|
+
expression: Expression;
|
|
32
|
+
/** @hidden */
|
|
33
|
+
name: SymbolPrimitive;
|
|
34
|
+
constructor(name: SymbolPrimitive, expression: Expression, loc?: SourceLocation);
|
|
35
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
36
|
+
toJSON(): any;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Data expression, used to construct Records
|
|
40
|
+
* @example
|
|
41
|
+
* f = DataName { fieldName = 2 }
|
|
42
|
+
* @category Expressions
|
|
43
|
+
*/
|
|
44
|
+
export declare class DataExpression extends ASTNode {
|
|
45
|
+
/** @hidden */
|
|
46
|
+
contents: FieldExpression[];
|
|
47
|
+
/** @hidden */
|
|
48
|
+
name: SymbolPrimitive;
|
|
49
|
+
constructor(name: SymbolPrimitive, contents: FieldExpression[], loc?: SourceLocation);
|
|
50
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
51
|
+
toJSON(): any;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Cons expression, represent a concatenation of a head and a tail
|
|
55
|
+
* @example
|
|
56
|
+
* f = x : xs
|
|
57
|
+
* @category Expressions
|
|
58
|
+
*/
|
|
59
|
+
export declare class ConsExpression extends ASTNode {
|
|
60
|
+
/** @hidden */
|
|
61
|
+
tail: Expression;
|
|
62
|
+
/** @hidden */
|
|
63
|
+
head: Expression;
|
|
64
|
+
constructor(head: Expression, tail: Expression, loc?: SourceLocation);
|
|
65
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
66
|
+
toJSON(): any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Represent let...in expressions normally used in Haskell
|
|
70
|
+
* @example
|
|
71
|
+
* f = let x = 2 in x * 4
|
|
72
|
+
* @category Expressions
|
|
73
|
+
*/
|
|
74
|
+
export declare class LetInExpression extends ASTNode {
|
|
75
|
+
/** @hidden */
|
|
76
|
+
expression: Expression;
|
|
77
|
+
/** @hidden */
|
|
78
|
+
declarations: Sequence;
|
|
79
|
+
constructor(declarations: Sequence, expression: Expression, loc?: SourceLocation);
|
|
80
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
81
|
+
toJSON(): {
|
|
82
|
+
type: string;
|
|
83
|
+
declarations: any;
|
|
84
|
+
expression: any;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Otherwise used as the default case in GuardBody
|
|
89
|
+
* @example
|
|
90
|
+
* f x
|
|
91
|
+
* | x == 2 = 16
|
|
92
|
+
* | otherwise = x * 8
|
|
93
|
+
* @category Declarations
|
|
94
|
+
*/
|
|
95
|
+
export declare class Otherwise extends ASTNode {
|
|
96
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
97
|
+
toJSON(): {
|
|
98
|
+
type: string;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* ListComprehension when the for expression is a yield.
|
|
103
|
+
* Scala's for comprehensions, Erlang's and Haskell's list comprehensions
|
|
104
|
+
* @example
|
|
105
|
+
* m = [ f x | x <- [1, 2, 3, 4] ]
|
|
106
|
+
* @category Expressions
|
|
107
|
+
*/
|
|
108
|
+
export declare class ListComprehension extends ASTNode {
|
|
109
|
+
/** @hidden */
|
|
110
|
+
generators: (Generator | Expression)[];
|
|
111
|
+
/** @hidden */
|
|
112
|
+
projection: Expression;
|
|
113
|
+
constructor(projection: Expression, generators: (Generator | Expression)[], loc?: SourceLocation);
|
|
114
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
115
|
+
toJSON(): any;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generator represents patterns like "Just m <- ms" or "x <- [1,2,3]"
|
|
119
|
+
* @example
|
|
120
|
+
* x <- [1, 2, 3, 4]
|
|
121
|
+
* @category Declarations
|
|
122
|
+
*/
|
|
123
|
+
export declare class Generator extends ASTNode {
|
|
124
|
+
/** @hidden */
|
|
125
|
+
expression: Expression;
|
|
126
|
+
/** @hidden */
|
|
127
|
+
variable: SymbolPrimitive;
|
|
128
|
+
constructor(variable: SymbolPrimitive, expression: Expression, loc?: SourceLocation);
|
|
129
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
130
|
+
toJSON(): any;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* RangeExpression represents when a list is given by comprehension in a defined range
|
|
134
|
+
* @example
|
|
135
|
+
* (1..10)
|
|
136
|
+
* @example
|
|
137
|
+
* (1, 2..10)
|
|
138
|
+
* @example
|
|
139
|
+
* (1..)
|
|
140
|
+
* @category Expressions
|
|
141
|
+
*/
|
|
142
|
+
export declare class RangeExpression extends ASTNode {
|
|
143
|
+
/** @hidden */
|
|
144
|
+
step?: Expression;
|
|
145
|
+
/** @hidden */
|
|
146
|
+
end?: Expression;
|
|
147
|
+
/** @hidden */
|
|
148
|
+
start: Expression;
|
|
149
|
+
constructor(start: Expression, end?: Expression, // undefined for infinite ranges like [0..]
|
|
150
|
+
step?: Expression, // for [start, second .. end] syntax
|
|
151
|
+
loc?: SourceLocation);
|
|
152
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
153
|
+
toJSON(): any;
|
|
154
|
+
}
|
|
155
|
+
export declare class NamedArgument extends ASTNode {
|
|
156
|
+
identifier: SymbolPrimitive;
|
|
157
|
+
expression: Expression;
|
|
158
|
+
constructor(identifier: SymbolPrimitive, expression: Expression, loc?: SourceLocation);
|
|
159
|
+
accept<R>(visitor: Visitor<R>): R;
|
|
160
|
+
toJSON(): {
|
|
161
|
+
type: string;
|
|
162
|
+
identifier: {
|
|
163
|
+
type: import("./primitives.js").YukigoPrimitive;
|
|
164
|
+
value: string;
|
|
165
|
+
};
|
|
166
|
+
expression: any;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export type Expression = Primitive | Operation | TupleExpression | Print | Otherwise | ConsExpression | Self | Sequence | New | Implement | DataExpression | CompositionExpression | Lambda | For | Application | Exist | Forall | Findall | Not | TypeCast | ListComprehension | RangeExpression | Assertion;
|
|
170
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/globals/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { ASTNode } from "./generics.js";
|
|
2
|
+
/**
|
|
3
|
+
* Represent tuples - generic non-uniform fixed-size collection of elements
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* (1, "Hello", true)
|
|
7
|
+
* @category Expressions
|
|
8
|
+
*/
|
|
9
|
+
export class TupleExpression extends ASTNode {
|
|
10
|
+
/** @hidden */
|
|
11
|
+
elements;
|
|
12
|
+
constructor(elements, loc) {
|
|
13
|
+
super(loc);
|
|
14
|
+
this.elements = elements;
|
|
15
|
+
}
|
|
16
|
+
accept(visitor) {
|
|
17
|
+
return visitor.visitTupleExpr?.(this);
|
|
18
|
+
}
|
|
19
|
+
toJSON() {
|
|
20
|
+
return {
|
|
21
|
+
type: "TupleExpression",
|
|
22
|
+
elements: this.elements.map((expr) => expr.toJSON()),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Fields of a data expression representations
|
|
28
|
+
* @category Expressions
|
|
29
|
+
*/
|
|
30
|
+
export class FieldExpression extends ASTNode {
|
|
31
|
+
/** @hidden */
|
|
32
|
+
expression;
|
|
33
|
+
/** @hidden */
|
|
34
|
+
name;
|
|
35
|
+
constructor(name, expression, loc) {
|
|
36
|
+
super(loc);
|
|
37
|
+
this.name = name;
|
|
38
|
+
this.expression = expression;
|
|
39
|
+
}
|
|
40
|
+
accept(visitor) {
|
|
41
|
+
return visitor.visitFieldExpr?.(this);
|
|
42
|
+
}
|
|
43
|
+
toJSON() {
|
|
44
|
+
return {
|
|
45
|
+
type: "FieldExpression",
|
|
46
|
+
name: this.name.toJSON(),
|
|
47
|
+
expression: this.expression.toJSON(),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Data expression, used to construct Records
|
|
53
|
+
* @example
|
|
54
|
+
* f = DataName { fieldName = 2 }
|
|
55
|
+
* @category Expressions
|
|
56
|
+
*/
|
|
57
|
+
export class DataExpression extends ASTNode {
|
|
58
|
+
/** @hidden */
|
|
59
|
+
contents;
|
|
60
|
+
/** @hidden */
|
|
61
|
+
name;
|
|
62
|
+
constructor(name, contents, loc) {
|
|
63
|
+
super(loc);
|
|
64
|
+
this.name = name;
|
|
65
|
+
this.contents = contents;
|
|
66
|
+
}
|
|
67
|
+
accept(visitor) {
|
|
68
|
+
return visitor.visitDataExpr?.(this);
|
|
69
|
+
}
|
|
70
|
+
toJSON() {
|
|
71
|
+
return {
|
|
72
|
+
type: "DataExpression",
|
|
73
|
+
name: this.name.toJSON(),
|
|
74
|
+
contents: this.contents.map((expr) => expr.toJSON()),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Cons expression, represent a concatenation of a head and a tail
|
|
80
|
+
* @example
|
|
81
|
+
* f = x : xs
|
|
82
|
+
* @category Expressions
|
|
83
|
+
*/
|
|
84
|
+
export class ConsExpression extends ASTNode {
|
|
85
|
+
/** @hidden */
|
|
86
|
+
tail;
|
|
87
|
+
/** @hidden */
|
|
88
|
+
head;
|
|
89
|
+
constructor(head, tail, loc) {
|
|
90
|
+
super(loc);
|
|
91
|
+
this.head = head;
|
|
92
|
+
this.tail = tail;
|
|
93
|
+
}
|
|
94
|
+
accept(visitor) {
|
|
95
|
+
return visitor.visitConsExpr?.(this);
|
|
96
|
+
}
|
|
97
|
+
toJSON() {
|
|
98
|
+
return {
|
|
99
|
+
type: "ConsExpression",
|
|
100
|
+
head: this.head.toJSON(),
|
|
101
|
+
tail: this.tail.toJSON(),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Represent let...in expressions normally used in Haskell
|
|
107
|
+
* @example
|
|
108
|
+
* f = let x = 2 in x * 4
|
|
109
|
+
* @category Expressions
|
|
110
|
+
*/
|
|
111
|
+
export class LetInExpression extends ASTNode {
|
|
112
|
+
/** @hidden */
|
|
113
|
+
expression;
|
|
114
|
+
/** @hidden */
|
|
115
|
+
declarations;
|
|
116
|
+
constructor(declarations, expression, loc) {
|
|
117
|
+
super(loc);
|
|
118
|
+
this.declarations = declarations;
|
|
119
|
+
this.expression = expression;
|
|
120
|
+
}
|
|
121
|
+
accept(visitor) {
|
|
122
|
+
return visitor.visitLetInExpr?.(this);
|
|
123
|
+
}
|
|
124
|
+
toJSON() {
|
|
125
|
+
return {
|
|
126
|
+
type: "LetInExpression",
|
|
127
|
+
declarations: this.declarations.toJSON(),
|
|
128
|
+
expression: this.expression.toJSON(),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Otherwise used as the default case in GuardBody
|
|
134
|
+
* @example
|
|
135
|
+
* f x
|
|
136
|
+
* | x == 2 = 16
|
|
137
|
+
* | otherwise = x * 8
|
|
138
|
+
* @category Declarations
|
|
139
|
+
*/
|
|
140
|
+
export class Otherwise extends ASTNode {
|
|
141
|
+
accept(visitor) {
|
|
142
|
+
return visitor.visitOtherwise?.(this);
|
|
143
|
+
}
|
|
144
|
+
toJSON() {
|
|
145
|
+
return {
|
|
146
|
+
type: "Otherwise",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* ListComprehension when the for expression is a yield.
|
|
152
|
+
* Scala's for comprehensions, Erlang's and Haskell's list comprehensions
|
|
153
|
+
* @example
|
|
154
|
+
* m = [ f x | x <- [1, 2, 3, 4] ]
|
|
155
|
+
* @category Expressions
|
|
156
|
+
*/
|
|
157
|
+
export class ListComprehension extends ASTNode {
|
|
158
|
+
/** @hidden */
|
|
159
|
+
generators;
|
|
160
|
+
/** @hidden */
|
|
161
|
+
projection;
|
|
162
|
+
constructor(projection, generators, loc) {
|
|
163
|
+
super(loc);
|
|
164
|
+
this.projection = projection;
|
|
165
|
+
this.generators = generators;
|
|
166
|
+
}
|
|
167
|
+
accept(visitor) {
|
|
168
|
+
return visitor.visitListComprehension?.(this);
|
|
169
|
+
}
|
|
170
|
+
toJSON() {
|
|
171
|
+
return {
|
|
172
|
+
type: "ListComprehension",
|
|
173
|
+
projection: this.projection.toJSON(),
|
|
174
|
+
generators: this.generators.map((gen) => gen.toJSON()),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Generator represents patterns like "Just m <- ms" or "x <- [1,2,3]"
|
|
180
|
+
* @example
|
|
181
|
+
* x <- [1, 2, 3, 4]
|
|
182
|
+
* @category Declarations
|
|
183
|
+
*/
|
|
184
|
+
export class Generator extends ASTNode {
|
|
185
|
+
/** @hidden */
|
|
186
|
+
expression;
|
|
187
|
+
/** @hidden */
|
|
188
|
+
variable;
|
|
189
|
+
constructor(variable, expression, loc) {
|
|
190
|
+
super(loc);
|
|
191
|
+
this.variable = variable;
|
|
192
|
+
this.expression = expression;
|
|
193
|
+
}
|
|
194
|
+
accept(visitor) {
|
|
195
|
+
return visitor.visitGenerator?.(this);
|
|
196
|
+
}
|
|
197
|
+
toJSON() {
|
|
198
|
+
return {
|
|
199
|
+
type: "Generator",
|
|
200
|
+
variable: this.variable.toJSON(),
|
|
201
|
+
expression: this.expression.toJSON(),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* RangeExpression represents when a list is given by comprehension in a defined range
|
|
207
|
+
* @example
|
|
208
|
+
* (1..10)
|
|
209
|
+
* @example
|
|
210
|
+
* (1, 2..10)
|
|
211
|
+
* @example
|
|
212
|
+
* (1..)
|
|
213
|
+
* @category Expressions
|
|
214
|
+
*/
|
|
215
|
+
export class RangeExpression extends ASTNode {
|
|
216
|
+
/** @hidden */
|
|
217
|
+
step;
|
|
218
|
+
/** @hidden */
|
|
219
|
+
end;
|
|
220
|
+
/** @hidden */
|
|
221
|
+
start;
|
|
222
|
+
constructor(start, end, // undefined for infinite ranges like [0..]
|
|
223
|
+
step, // for [start, second .. end] syntax
|
|
224
|
+
loc) {
|
|
225
|
+
super(loc);
|
|
226
|
+
this.start = start;
|
|
227
|
+
this.end = end;
|
|
228
|
+
this.step = step;
|
|
229
|
+
}
|
|
230
|
+
accept(visitor) {
|
|
231
|
+
return visitor.visitRangeExpression?.(this);
|
|
232
|
+
}
|
|
233
|
+
toJSON() {
|
|
234
|
+
return {
|
|
235
|
+
type: "RangeExpression",
|
|
236
|
+
start: this.start.toJSON(),
|
|
237
|
+
end: this.end?.toJSON(),
|
|
238
|
+
step: this.step?.toJSON(),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
export class NamedArgument extends ASTNode {
|
|
243
|
+
identifier;
|
|
244
|
+
expression;
|
|
245
|
+
constructor(identifier, expression, loc) {
|
|
246
|
+
super(loc);
|
|
247
|
+
this.identifier = identifier;
|
|
248
|
+
this.expression = expression;
|
|
249
|
+
}
|
|
250
|
+
accept(visitor) {
|
|
251
|
+
return visitor.visitNamedArgument?.(this);
|
|
252
|
+
}
|
|
253
|
+
toJSON() {
|
|
254
|
+
return {
|
|
255
|
+
type: "NamedArgument",
|
|
256
|
+
identifier: this.identifier.toJSON(),
|
|
257
|
+
expression: this.expression.toJSON(),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|