yukigo-wollok-parser 0.1.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 +24 -0
- package/README.md +0 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/transformer.d.ts +26 -0
- package/dist/transformer.js +285 -0
- package/dist/transformer.js.map +1 -0
- package/package.json +35 -0
- package/src/index.ts +26 -0
- package/src/transformer.ts +427 -0
- package/tests/operations.spec.ts +154 -0
- package/tests/transformer.spec.ts +384 -0
- package/tsconfig.json +17 -0
package/.mocharc.json
ADDED
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
## 0.1.0 (2025-12-09)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **yukigo:** Nx Release added ([0bee88f](https://github.com/miyukiproject/yukigo/commit/0bee88f))
|
|
6
|
+
- **yukigo-wollok-parser:** Schmol refactor to visitSend ([2e0e20f](https://github.com/miyukiproject/yukigo/commit/2e0e20f))
|
|
7
|
+
- **yukigo-wollok-parser:** RangeExpression & Collections ([85c7c2f](https://github.com/miyukiproject/yukigo/commit/85c7c2f))
|
|
8
|
+
- **yukigo-wollok-parser:** Added missing operations ([421df52](https://github.com/miyukiproject/yukigo/commit/421df52))
|
|
9
|
+
- **yukigo-wollok-parser:** Added support for more nodes. Missing some operations ([847b0c2](https://github.com/miyukiproject/yukigo/commit/847b0c2))
|
|
10
|
+
- **yukigo-wollok-parser:** Return methods & ArithmeticBinaryOperations ([7fc4cf5](https://github.com/miyukiproject/yukigo/commit/7fc4cf5))
|
|
11
|
+
- **yukigo-wollok-parser:** Initial parser using transformation strategy ([d6a563b](https://github.com/miyukiproject/yukigo/commit/d6a563b))
|
|
12
|
+
|
|
13
|
+
### 🩹 Fixes
|
|
14
|
+
|
|
15
|
+
- **general:** Remove build step from tests command ([9d6e02f](https://github.com/miyukiproject/yukigo/commit/9d6e02f))
|
|
16
|
+
- **yukigo-wollok-parser:** Small skill issue in a test ([71ce305](https://github.com/miyukiproject/yukigo/commit/71ce305))
|
|
17
|
+
|
|
18
|
+
### 🧱 Updated Dependencies
|
|
19
|
+
|
|
20
|
+
- Updated @yukigo/ast to 0.1.0
|
|
21
|
+
|
|
22
|
+
### ❤️ Thank You
|
|
23
|
+
|
|
24
|
+
- noiseArch
|
package/README.md
ADDED
|
File without changes
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { parse } from "wollok-ts";
|
|
2
|
+
import { WollokToYukigoTransformer } from "./transformer.js";
|
|
3
|
+
export class YukigoWollokParser {
|
|
4
|
+
errors = [];
|
|
5
|
+
constructor() {
|
|
6
|
+
this.errors = [];
|
|
7
|
+
}
|
|
8
|
+
parse(code) {
|
|
9
|
+
const parserResult = parse.File("example").parse(code);
|
|
10
|
+
if (parserResult.status === false) {
|
|
11
|
+
const { index, expected } = parserResult;
|
|
12
|
+
const expectation = expected.join(" or ");
|
|
13
|
+
const message = `Parse error at line ${index.line} column ${index.column}: expected ${expectation}.`;
|
|
14
|
+
throw new Error(message);
|
|
15
|
+
}
|
|
16
|
+
const resultAST = parserResult.value;
|
|
17
|
+
const transformer = new WollokToYukigoTransformer();
|
|
18
|
+
const yukigoAst = transformer.transform(resultAST);
|
|
19
|
+
return yukigoAst;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,OAAO,kBAAkB;IACtB,MAAM,GAAa,EAAE,CAAC;IAC7B;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,IAAY;QACvB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;YACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,uBAAuB,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,MAAM,cAAc,WAAW,GAAG,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;QAErC,MAAM,WAAW,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEnD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as Yu from "@yukigo/ast";
|
|
2
|
+
import { Package } from "wollok-ts";
|
|
3
|
+
export declare class WollokToYukigoTransformer {
|
|
4
|
+
transform(root: Package): Yu.AST;
|
|
5
|
+
private visit;
|
|
6
|
+
private visitPackage;
|
|
7
|
+
private visitImport;
|
|
8
|
+
private visitField;
|
|
9
|
+
private visitVariable;
|
|
10
|
+
private visitAssignment;
|
|
11
|
+
private visitNew;
|
|
12
|
+
private visitIf;
|
|
13
|
+
private visitThrow;
|
|
14
|
+
private visitTry;
|
|
15
|
+
private visitCatch;
|
|
16
|
+
private visitSuper;
|
|
17
|
+
private visitSingleton;
|
|
18
|
+
private visitClass;
|
|
19
|
+
private visitMethod;
|
|
20
|
+
private visitParameter;
|
|
21
|
+
private visitReturn;
|
|
22
|
+
private visitBody;
|
|
23
|
+
private visitSend;
|
|
24
|
+
private visitReference;
|
|
25
|
+
private visitLiteral;
|
|
26
|
+
}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import * as Yu from "@yukigo/ast";
|
|
2
|
+
const ARITHMETIC_BINARY_OPS = {
|
|
3
|
+
"+": "Plus",
|
|
4
|
+
"-": "Minus",
|
|
5
|
+
"*": "Multiply",
|
|
6
|
+
"/": "Divide",
|
|
7
|
+
"%": "Modulo",
|
|
8
|
+
"**": "Power",
|
|
9
|
+
max: "Max",
|
|
10
|
+
min: "Min",
|
|
11
|
+
};
|
|
12
|
+
const COMPARISON_OPS = {
|
|
13
|
+
"==": "Equal",
|
|
14
|
+
"!=": "NotEqual",
|
|
15
|
+
"===": "Same",
|
|
16
|
+
"!==": "NotSame",
|
|
17
|
+
">=": "GreaterOrEqualThan",
|
|
18
|
+
">": "GreaterThan",
|
|
19
|
+
"<=": "LessOrEqualThan",
|
|
20
|
+
"<": "LessThan",
|
|
21
|
+
like: "Similar",
|
|
22
|
+
};
|
|
23
|
+
const LOGICAL_BINARY_OPS = {
|
|
24
|
+
"&&": "And",
|
|
25
|
+
and: "And",
|
|
26
|
+
"||": "Or",
|
|
27
|
+
or: "Or",
|
|
28
|
+
};
|
|
29
|
+
const BITWISE_BINARY_OPS = {
|
|
30
|
+
"|": "BitwiseOr",
|
|
31
|
+
"&": "BitwiseAnd",
|
|
32
|
+
"^": "BitwiseXor",
|
|
33
|
+
"<<": "BitwiseLeftShift",
|
|
34
|
+
">>": "BitwiseRightShift",
|
|
35
|
+
">>>": "BitwiseUnsignedRightShift",
|
|
36
|
+
};
|
|
37
|
+
function mapLocation(wollokNode) {
|
|
38
|
+
if (wollokNode.sourceMap && wollokNode.sourceMap.start) {
|
|
39
|
+
return new Yu.SourceLocation(wollokNode.sourceMap.start.line, wollokNode.sourceMap.start.column);
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
export class WollokToYukigoTransformer {
|
|
44
|
+
transform(root) {
|
|
45
|
+
const result = this.visit(root);
|
|
46
|
+
return Array.isArray(result) ? result : [result];
|
|
47
|
+
}
|
|
48
|
+
visit(node) {
|
|
49
|
+
const nodeType = node.constructor ? node.constructor.name : "Unknown";
|
|
50
|
+
switch (nodeType) {
|
|
51
|
+
case "Package":
|
|
52
|
+
return this.visitPackage(node);
|
|
53
|
+
case "Singleton":
|
|
54
|
+
return this.visitSingleton(node);
|
|
55
|
+
case "Mixin":
|
|
56
|
+
case "Class":
|
|
57
|
+
return this.visitClass(node);
|
|
58
|
+
case "Method":
|
|
59
|
+
return this.visitMethod(node);
|
|
60
|
+
case "Body":
|
|
61
|
+
return this.visitBody(node);
|
|
62
|
+
case "Send":
|
|
63
|
+
return this.visitSend(node);
|
|
64
|
+
case "Literal":
|
|
65
|
+
return this.visitLiteral(node);
|
|
66
|
+
case "Reference":
|
|
67
|
+
return this.visitReference(node);
|
|
68
|
+
case "Parameter":
|
|
69
|
+
return this.visitParameter(node);
|
|
70
|
+
case "Return":
|
|
71
|
+
return this.visitReturn(node);
|
|
72
|
+
case "Variable":
|
|
73
|
+
return this.visitVariable(node);
|
|
74
|
+
case "New":
|
|
75
|
+
return this.visitNew(node);
|
|
76
|
+
case "If":
|
|
77
|
+
return this.visitIf(node);
|
|
78
|
+
case "Field":
|
|
79
|
+
return this.visitField(node);
|
|
80
|
+
case "Assignment":
|
|
81
|
+
return this.visitAssignment(node);
|
|
82
|
+
case "Throw":
|
|
83
|
+
return this.visitThrow(node);
|
|
84
|
+
case "Try":
|
|
85
|
+
return this.visitTry(node);
|
|
86
|
+
case "Catch":
|
|
87
|
+
return this.visitCatch(node);
|
|
88
|
+
case "Super":
|
|
89
|
+
return this.visitSuper(node);
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Nodo Wollok desconocido o no soportado: ${nodeType}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
visitPackage(node) {
|
|
95
|
+
return [
|
|
96
|
+
...node.imports.map((imp) => this.visitImport(imp)),
|
|
97
|
+
...node.members.map((member) => this.visit(member)),
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
visitImport(node) {
|
|
101
|
+
const identifier = new Yu.SymbolPrimitive(node.entity.name, mapLocation(node));
|
|
102
|
+
return new Yu.Include(identifier, mapLocation(node));
|
|
103
|
+
}
|
|
104
|
+
visitField(node) {
|
|
105
|
+
const identifier = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
106
|
+
let value;
|
|
107
|
+
if (node.value) {
|
|
108
|
+
value = this.visit(node.value);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// default to Nil if no initial value provided
|
|
112
|
+
value = new Yu.NilPrimitive(null, mapLocation(node));
|
|
113
|
+
}
|
|
114
|
+
return new Yu.Attribute(identifier, value, mapLocation(node));
|
|
115
|
+
}
|
|
116
|
+
visitVariable(node) {
|
|
117
|
+
const identifier = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
118
|
+
let expression;
|
|
119
|
+
if (node.value) {
|
|
120
|
+
expression = this.visit(node.value);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
expression = new Yu.NilPrimitive(null, mapLocation(node));
|
|
124
|
+
}
|
|
125
|
+
return new Yu.Variable(identifier, expression, undefined, mapLocation(node));
|
|
126
|
+
}
|
|
127
|
+
visitAssignment(node) {
|
|
128
|
+
const refName = node.variable.name || node.variable;
|
|
129
|
+
const identifier = new Yu.SymbolPrimitive(refName.toString(), mapLocation(node));
|
|
130
|
+
const expression = this.visit(node.value);
|
|
131
|
+
return new Yu.Assignment(identifier, expression, mapLocation(node));
|
|
132
|
+
}
|
|
133
|
+
visitNew(node) {
|
|
134
|
+
const className = new Yu.SymbolPrimitive(node.instantiated.name, mapLocation(node));
|
|
135
|
+
const args = (node.args || []).map((arg) => this.visit(arg));
|
|
136
|
+
return new Yu.New(className, args, mapLocation(node));
|
|
137
|
+
}
|
|
138
|
+
visitIf(node) {
|
|
139
|
+
const condition = this.visit(node.condition);
|
|
140
|
+
const thenExpr = this.visit(node.thenBody);
|
|
141
|
+
let elseExpr;
|
|
142
|
+
if (node.elseBody) {
|
|
143
|
+
elseExpr = this.visit(node.elseBody);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
elseExpr = new Yu.Sequence([], mapLocation(node));
|
|
147
|
+
}
|
|
148
|
+
return new Yu.If(condition, thenExpr, elseExpr, mapLocation(node));
|
|
149
|
+
}
|
|
150
|
+
visitThrow(node) {
|
|
151
|
+
const exception = this.visit(node.exception);
|
|
152
|
+
return new Yu.Raise(exception, mapLocation(node));
|
|
153
|
+
}
|
|
154
|
+
visitTry(node) {
|
|
155
|
+
const body = this.visit(node.body);
|
|
156
|
+
const catchExprs = (node.catches || []).map((c) => this.visitCatch(c));
|
|
157
|
+
let finallyExpr;
|
|
158
|
+
if (node.always) {
|
|
159
|
+
finallyExpr = this.visit(node.always);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
finallyExpr = new Yu.Sequence([], mapLocation(node));
|
|
163
|
+
}
|
|
164
|
+
return new Yu.Try(body, catchExprs, finallyExpr, mapLocation(node));
|
|
165
|
+
}
|
|
166
|
+
visitCatch(node) {
|
|
167
|
+
const paramName = node.parameter.name;
|
|
168
|
+
const pattern = new Yu.VariablePattern(new Yu.SymbolPrimitive(paramName, mapLocation(node.parameter)), mapLocation(node.parameter));
|
|
169
|
+
const body = this.visit(node.body);
|
|
170
|
+
return new Yu.Catch([pattern], body, mapLocation(node));
|
|
171
|
+
}
|
|
172
|
+
visitSuper(node) {
|
|
173
|
+
return new Yu.Super(mapLocation(node));
|
|
174
|
+
}
|
|
175
|
+
visitSingleton(node) {
|
|
176
|
+
const identifier = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
177
|
+
const members = node.members.map((m) => this.visit(m));
|
|
178
|
+
const bodyExpression = new Yu.Sequence(members, mapLocation(node));
|
|
179
|
+
return new Yu.Object(identifier, bodyExpression, mapLocation(node));
|
|
180
|
+
}
|
|
181
|
+
visitClass(node) {
|
|
182
|
+
const identifier = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
183
|
+
const members = node.members.map((m) => this.visit(m));
|
|
184
|
+
const bodyExpression = new Yu.Sequence(members, mapLocation(node));
|
|
185
|
+
const classInstance = new Yu.Class(identifier, undefined, undefined, bodyExpression, mapLocation(node));
|
|
186
|
+
return classInstance;
|
|
187
|
+
}
|
|
188
|
+
visitMethod(node) {
|
|
189
|
+
const identifier = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
190
|
+
const patterns = (node.parameters || []).map((param) => this.visit(param));
|
|
191
|
+
if (node.body === "native")
|
|
192
|
+
throw Error("Native methods not supported yet.");
|
|
193
|
+
const bodySequence = this.visit(node.body);
|
|
194
|
+
const unguardedBody = new Yu.UnguardedBody(bodySequence, mapLocation(node.body));
|
|
195
|
+
const equation = new Yu.Equation(patterns, unguardedBody, undefined, mapLocation(node));
|
|
196
|
+
return new Yu.Method(identifier, [equation], mapLocation(node));
|
|
197
|
+
}
|
|
198
|
+
visitParameter(node) {
|
|
199
|
+
const nameSymbol = new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
200
|
+
return new Yu.VariablePattern(nameSymbol, mapLocation(node));
|
|
201
|
+
}
|
|
202
|
+
visitReturn(node) {
|
|
203
|
+
const expression = this.visit(node.value);
|
|
204
|
+
return new Yu.Return(expression, mapLocation(node));
|
|
205
|
+
}
|
|
206
|
+
visitBody(node) {
|
|
207
|
+
const statements = node.sentences.map((s) => this.visit(s));
|
|
208
|
+
return new Yu.Sequence(statements, mapLocation(node));
|
|
209
|
+
}
|
|
210
|
+
visitSend(node) {
|
|
211
|
+
const receiver = this.visit(node.receiver);
|
|
212
|
+
const args = (node.args || []).map((arg) => this.visit(arg));
|
|
213
|
+
const op = node.message;
|
|
214
|
+
const loc = mapLocation(node);
|
|
215
|
+
if (args.length === 1) {
|
|
216
|
+
const binaryExpr = transformBinary(op, receiver, args[0], loc);
|
|
217
|
+
if (binaryExpr)
|
|
218
|
+
return binaryExpr;
|
|
219
|
+
}
|
|
220
|
+
if (args.length === 0) {
|
|
221
|
+
const unaryExpr = transformUnary(op, receiver, loc);
|
|
222
|
+
// note that binaryExpr and unaryExpr can be null if it transform functions cant match any operation to the selector
|
|
223
|
+
if (unaryExpr)
|
|
224
|
+
return unaryExpr;
|
|
225
|
+
}
|
|
226
|
+
const selector = new Yu.SymbolPrimitive(op, loc);
|
|
227
|
+
return new Yu.Send(receiver, selector, args, loc);
|
|
228
|
+
}
|
|
229
|
+
visitReference(node) {
|
|
230
|
+
if (node.name === "self")
|
|
231
|
+
return new Yu.Self(mapLocation(node));
|
|
232
|
+
return new Yu.SymbolPrimitive(node.name, mapLocation(node));
|
|
233
|
+
}
|
|
234
|
+
visitLiteral(node) {
|
|
235
|
+
const val = node.value;
|
|
236
|
+
const loc = mapLocation(node);
|
|
237
|
+
const isCollection = Array.isArray(val) &&
|
|
238
|
+
"name" in val[0] &&
|
|
239
|
+
WollokListTypes.includes(val[0].name);
|
|
240
|
+
if (isCollection)
|
|
241
|
+
return new Yu.ListPrimitive(val[1].map((element) => this.visit(element)), loc);
|
|
242
|
+
if (typeof val === "number")
|
|
243
|
+
return new Yu.NumberPrimitive(val, loc);
|
|
244
|
+
if (typeof val === "boolean")
|
|
245
|
+
return new Yu.BooleanPrimitive(val, loc);
|
|
246
|
+
if (val === null)
|
|
247
|
+
return new Yu.NilPrimitive(null, loc);
|
|
248
|
+
return new Yu.StringPrimitive(String(val), loc);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const WollokListTypes = ["wollok.lang.List", "wollok.lang.Set"];
|
|
252
|
+
function transformBinary(op, left, right, loc) {
|
|
253
|
+
// RangeExpression
|
|
254
|
+
if (op === "..")
|
|
255
|
+
return new Yu.RangeExpression(left, right, undefined, loc);
|
|
256
|
+
// Arithmetic
|
|
257
|
+
if (op in ARITHMETIC_BINARY_OPS)
|
|
258
|
+
return new Yu.ArithmeticBinaryOperation(ARITHMETIC_BINARY_OPS[op], left, right, loc);
|
|
259
|
+
// Comparison
|
|
260
|
+
if (op in COMPARISON_OPS)
|
|
261
|
+
return new Yu.ComparisonOperation(COMPARISON_OPS[op], left, right, loc);
|
|
262
|
+
// Logical
|
|
263
|
+
if (op in LOGICAL_BINARY_OPS)
|
|
264
|
+
return new Yu.LogicalBinaryOperation(LOGICAL_BINARY_OPS[op], left, right, loc);
|
|
265
|
+
// Bitwise
|
|
266
|
+
if (op in BITWISE_BINARY_OPS)
|
|
267
|
+
return new Yu.BitwiseBinaryOperation(BITWISE_BINARY_OPS[op], left, right, loc);
|
|
268
|
+
// String Concatenation
|
|
269
|
+
if (op === "++" || op === "concat")
|
|
270
|
+
return new Yu.StringOperation("Concat", left, right, loc);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
function transformUnary(op, receiver, loc) {
|
|
274
|
+
// Logical Negation
|
|
275
|
+
if (["!", "negate"].includes(op))
|
|
276
|
+
return new Yu.LogicalUnaryOperation("Negation", receiver, loc);
|
|
277
|
+
// Arithmetic Negation
|
|
278
|
+
if (["invert", "-"].includes(op))
|
|
279
|
+
return new Yu.ArithmeticUnaryOperation("Negation", receiver, loc);
|
|
280
|
+
// Bitwise Negation
|
|
281
|
+
if (["~", "bitwiseNot"].includes(op))
|
|
282
|
+
return new Yu.BitwiseUnaryOperation("BitwiseNot", receiver, loc);
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "yukigo-wollok-parser",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/index.js",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"test": "mocha --import=tsx"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [],
|
|
17
|
+
"author": "",
|
|
18
|
+
"license": "ISC",
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/chai": "^5.2.2",
|
|
21
|
+
"@types/mocha": "^10.0.10",
|
|
22
|
+
"@types/moo": "^0.5.10",
|
|
23
|
+
"@types/node": "^24.2.0",
|
|
24
|
+
"chai": "^5.2.1",
|
|
25
|
+
"mocha": "^11.7.1",
|
|
26
|
+
"tsx": "^4.20.6",
|
|
27
|
+
"typescript": "^5.9.2"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"moo": "^0.5.2",
|
|
31
|
+
"nearley": "^2.20.1",
|
|
32
|
+
"wollok-ts": "^4.2.3",
|
|
33
|
+
"yukigo-ast": "0.1.0"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AST, YukigoParser } from "yukigo-ast;
|
|
2
|
+
import { parse } from "wollok-ts";
|
|
3
|
+
import { WollokToYukigoTransformer } from "./transformer.js";
|
|
4
|
+
|
|
5
|
+
export class YukigoWollokParser implements YukigoParser {
|
|
6
|
+
public errors: string[] = [];
|
|
7
|
+
constructor() {
|
|
8
|
+
this.errors = [];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public parse(code: string): AST {
|
|
12
|
+
const parserResult = parse.File("example").parse(code);
|
|
13
|
+
if (parserResult.status === false) {
|
|
14
|
+
const { index, expected } = parserResult;
|
|
15
|
+
const expectation = expected.join(" or ");
|
|
16
|
+
const message = `Parse error at line ${index.line} column ${index.column}: expected ${expectation}.`;
|
|
17
|
+
throw new Error(message);
|
|
18
|
+
}
|
|
19
|
+
const resultAST = parserResult.value;
|
|
20
|
+
|
|
21
|
+
const transformer = new WollokToYukigoTransformer();
|
|
22
|
+
const yukigoAst = transformer.transform(resultAST);
|
|
23
|
+
|
|
24
|
+
return yukigoAst;
|
|
25
|
+
}
|
|
26
|
+
}
|