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.
Files changed (115) hide show
  1. package/.mocharc.json +4 -0
  2. package/CHANGELOG.md +10 -0
  3. package/dist/globals/expressions.d.ts +170 -0
  4. package/dist/globals/expressions.d.ts.map +1 -0
  5. package/dist/globals/expressions.js +260 -0
  6. package/dist/globals/generics.d.ts +6 -703
  7. package/dist/globals/generics.d.ts.map +1 -0
  8. package/dist/globals/generics.js +2 -1087
  9. package/dist/globals/operators.d.ts +5 -3
  10. package/dist/globals/operators.d.ts.map +1 -0
  11. package/dist/globals/patterns.d.ts +102 -77
  12. package/dist/globals/patterns.d.ts.map +1 -0
  13. package/dist/globals/patterns.js +152 -130
  14. package/dist/globals/primitives.d.ts +87 -0
  15. package/dist/globals/primitives.d.ts.map +1 -0
  16. package/dist/globals/primitives.js +130 -0
  17. package/dist/globals/runtime.d.ts +46 -4
  18. package/dist/globals/runtime.d.ts.map +1 -0
  19. package/dist/globals/runtime.js +26 -0
  20. package/dist/globals/statements.d.ts +510 -0
  21. package/dist/globals/statements.d.ts.map +1 -0
  22. package/dist/globals/statements.js +618 -0
  23. package/dist/globals/testing.d.ts +73 -0
  24. package/dist/globals/testing.d.ts.map +1 -0
  25. package/dist/globals/testing.js +115 -0
  26. package/dist/globals/types.d.ts +7 -4
  27. package/dist/globals/types.d.ts.map +1 -0
  28. package/dist/index.d.ts +7 -3
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +6 -3
  31. package/dist/paradigms/functional.d.ts +8 -3
  32. package/dist/paradigms/functional.d.ts.map +1 -0
  33. package/dist/paradigms/imperative.d.ts +43 -10
  34. package/dist/paradigms/imperative.d.ts.map +1 -0
  35. package/dist/paradigms/imperative.js +1 -1
  36. package/dist/paradigms/logic.d.ts +71 -30
  37. package/dist/paradigms/logic.d.ts.map +1 -0
  38. package/dist/paradigms/logic.js +39 -22
  39. package/dist/paradigms/object.d.ts +94 -30
  40. package/dist/paradigms/object.d.ts.map +1 -0
  41. package/dist/paradigms/object.js +13 -22
  42. package/dist/paradigms/typeclasses.d.ts +95 -0
  43. package/dist/paradigms/typeclasses.d.ts.map +1 -0
  44. package/dist/paradigms/typeclasses.js +70 -0
  45. package/dist/types.d.ts +4 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +1 -0
  48. package/dist/visitor/base.d.ts +10 -0
  49. package/dist/visitor/base.d.ts.map +1 -0
  50. package/dist/visitor/base.js +8 -0
  51. package/dist/visitor/expressions.d.ts +60 -0
  52. package/dist/visitor/expressions.d.ts.map +1 -0
  53. package/dist/visitor/expressions.js +92 -0
  54. package/dist/visitor/index.d.ts +190 -0
  55. package/dist/visitor/index.d.ts.map +1 -0
  56. package/dist/visitor/index.js +26 -0
  57. package/dist/visitor/operations.d.ts +43 -0
  58. package/dist/visitor/operations.d.ts.map +1 -0
  59. package/dist/visitor/operations.js +47 -0
  60. package/dist/visitor/patterns.d.ts +35 -0
  61. package/dist/visitor/patterns.d.ts.map +1 -0
  62. package/dist/visitor/patterns.js +43 -0
  63. package/dist/visitor/primitives.d.ts +25 -0
  64. package/dist/visitor/primitives.d.ts.map +1 -0
  65. package/dist/visitor/primitives.js +13 -0
  66. package/dist/visitor/statements.d.ts +96 -0
  67. package/dist/visitor/statements.d.ts.map +1 -0
  68. package/dist/visitor/statements.js +166 -0
  69. package/dist/visitor/testing.d.ts +23 -0
  70. package/dist/visitor/testing.d.ts.map +1 -0
  71. package/dist/visitor/testing.js +28 -0
  72. package/dist/visitor/typeclasses.d.ts +15 -0
  73. package/dist/visitor/typeclasses.d.ts.map +1 -0
  74. package/dist/visitor/typeclasses.js +10 -0
  75. package/dist/visitor/types.d.ts +33 -0
  76. package/dist/visitor/types.d.ts.map +1 -0
  77. package/dist/visitor/types.js +44 -0
  78. package/package.json +9 -3
  79. package/src/globals/expressions.ts +339 -0
  80. package/src/globals/generics.ts +65 -1421
  81. package/src/globals/operators.ts +517 -515
  82. package/src/globals/patterns.ts +347 -321
  83. package/src/globals/primitives.ts +169 -0
  84. package/src/globals/runtime.ts +132 -33
  85. package/src/globals/statements.ts +768 -0
  86. package/src/globals/testing.ts +131 -0
  87. package/src/globals/types.ts +375 -375
  88. package/src/index.ts +15 -12
  89. package/src/paradigms/functional.ts +128 -129
  90. package/src/paradigms/imperative.ts +227 -232
  91. package/src/paradigms/logic.ts +309 -314
  92. package/src/paradigms/object.ts +356 -366
  93. package/src/paradigms/typeclasses.ts +95 -0
  94. package/src/visitor/base.ts +17 -0
  95. package/src/visitor/expressions.ts +153 -0
  96. package/src/visitor/index.ts +52 -0
  97. package/src/visitor/operations.ts +82 -0
  98. package/src/visitor/patterns.ts +76 -0
  99. package/src/visitor/primitives.ts +36 -0
  100. package/src/visitor/statements.ts +261 -0
  101. package/src/visitor/testing.ts +49 -0
  102. package/src/visitor/typeclasses.ts +23 -0
  103. package/src/visitor/types.ts +75 -0
  104. package/tests/ast.spec.ts +17 -0
  105. package/tsconfig.json +25 -22
  106. package/tsconfig.tsbuildinfo +1 -0
  107. package/dist/globals/helpers.d.ts +0 -4
  108. package/dist/globals/helpers.js +0 -76
  109. package/dist/paradigms/data.d.ts +0 -246
  110. package/dist/paradigms/data.js +0 -348
  111. package/dist/visitor.d.ts +0 -254
  112. package/dist/visitor.js +0 -426
  113. package/src/globals/helpers.ts +0 -107
  114. package/src/paradigms/data.ts +0 -393
  115. package/src/visitor.ts +0 -692
package/.mocharc.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "extension": ["ts"],
3
+ "spec": "tests/**/*.spec.ts"
4
+ }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 0.2.0 (2026-04-11)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **yukigo-ast:** agrego metodo is ASTNode ([6a63873](https://github.com/miyukiproject/yukigo/commit/6a63873))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Santiago Schneideroff
10
+
1
11
  ## 0.1.0 (2025-12-09)
2
12
 
3
13
  ### 🚀 Features
@@ -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
+ }