@dseict/psc-interpreter 0.0.1 → 1.0.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/dist/PSCLexerBase.d.ts +9 -0
- package/dist/PSCLexerBase.d.ts.map +1 -0
- package/dist/PSCLexerBase.js +90 -0
- package/dist/PSCLexerBase.js.map +1 -0
- package/dist/_antlr/PSCLexer.d.ts +71 -0
- package/dist/_antlr/PSCLexer.d.ts.map +1 -0
- package/dist/_antlr/PSCLexer.js +253 -0
- package/dist/_antlr/PSCLexer.js.map +1 -0
- package/dist/_antlr/PSCParser.d.ts +475 -0
- package/dist/_antlr/PSCParser.d.ts.map +1 -0
- package/dist/_antlr/PSCParser.js +3075 -0
- package/dist/_antlr/PSCParser.js.map +1 -0
- package/dist/_antlr/PSCParserVisitor.d.ts +256 -0
- package/dist/_antlr/PSCParserVisitor.d.ts.map +1 -0
- package/dist/_antlr/PSCParserVisitor.js +257 -0
- package/dist/_antlr/PSCParserVisitor.js.map +1 -0
- package/dist/error.d.ts +32 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +60 -0
- package/dist/error.js.map +1 -0
- package/dist/events.d.ts +56 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +22 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/visitor.d.ts +53 -0
- package/dist/visitor.d.ts.map +1 -0
- package/dist/visitor.js +766 -0
- package/dist/visitor.js.map +1 -0
- package/package.json +14 -3
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// Generated from ./PSCParser.g4 by ANTLR 4.13.0
|
|
2
|
+
import { ParseTreeVisitor } from 'antlr4';
|
|
3
|
+
import { ProgramContext } from "./PSCParser";
|
|
4
|
+
import { AddOpContext } from "./PSCParser";
|
|
5
|
+
import { MulOpContext } from "./PSCParser";
|
|
6
|
+
import { ExpOpContext } from "./PSCParser";
|
|
7
|
+
import { CompOpContext } from "./PSCParser";
|
|
8
|
+
import { ExprContext } from "./PSCParser";
|
|
9
|
+
import { OrExprContext } from "./PSCParser";
|
|
10
|
+
import { AndExprContext } from "./PSCParser";
|
|
11
|
+
import { CompExprContext } from "./PSCParser";
|
|
12
|
+
import { AddExprContext } from "./PSCParser";
|
|
13
|
+
import { MulExprContext } from "./PSCParser";
|
|
14
|
+
import { ExpExprContext } from "./PSCParser";
|
|
15
|
+
import { UnaryExprContext } from "./PSCParser";
|
|
16
|
+
import { NotExprContext } from "./PSCParser";
|
|
17
|
+
import { PrimaryExprContext } from "./PSCParser";
|
|
18
|
+
import { GroupExprContext } from "./PSCParser";
|
|
19
|
+
import { AtomContext } from "./PSCParser";
|
|
20
|
+
import { LitsContext } from "./PSCParser";
|
|
21
|
+
import { IntLitsContext } from "./PSCParser";
|
|
22
|
+
import { FloatLitsContext } from "./PSCParser";
|
|
23
|
+
import { ArrayLitsContext } from "./PSCParser";
|
|
24
|
+
import { StmtsContext } from "./PSCParser";
|
|
25
|
+
import { StmtContext } from "./PSCParser";
|
|
26
|
+
import { BlockContext } from "./PSCParser";
|
|
27
|
+
import { IfStmtContext } from "./PSCParser";
|
|
28
|
+
import { WhileStmtContext } from "./PSCParser";
|
|
29
|
+
import { DoWhileStmtContext } from "./PSCParser";
|
|
30
|
+
import { RepeatUntilStmtContext } from "./PSCParser";
|
|
31
|
+
import { ForStmtContext } from "./PSCParser";
|
|
32
|
+
import { AsmStmtContext } from "./PSCParser";
|
|
33
|
+
import { LvalueContext } from "./PSCParser";
|
|
34
|
+
import { InputStmtContext } from "./PSCParser";
|
|
35
|
+
import { OutputStmtContext } from "./PSCParser";
|
|
36
|
+
import { SubprogramContext } from "./PSCParser";
|
|
37
|
+
import { ReturnStmtContext } from "./PSCParser";
|
|
38
|
+
/**
|
|
39
|
+
* This interface defines a complete generic visitor for a parse tree produced
|
|
40
|
+
* by `PSCParser`.
|
|
41
|
+
*
|
|
42
|
+
* @param <Result> The return type of the visit operation. Use `void` for
|
|
43
|
+
* operations with no return type.
|
|
44
|
+
*/
|
|
45
|
+
export default class PSCParserVisitor extends ParseTreeVisitor {
|
|
46
|
+
/**
|
|
47
|
+
* Visit a parse tree produced by `PSCParser.program`.
|
|
48
|
+
* @param ctx the parse tree
|
|
49
|
+
* @return the visitor result
|
|
50
|
+
*/
|
|
51
|
+
visitProgram;
|
|
52
|
+
/**
|
|
53
|
+
* Visit a parse tree produced by `PSCParser.addOp`.
|
|
54
|
+
* @param ctx the parse tree
|
|
55
|
+
* @return the visitor result
|
|
56
|
+
*/
|
|
57
|
+
visitAddOp;
|
|
58
|
+
/**
|
|
59
|
+
* Visit a parse tree produced by `PSCParser.mulOp`.
|
|
60
|
+
* @param ctx the parse tree
|
|
61
|
+
* @return the visitor result
|
|
62
|
+
*/
|
|
63
|
+
visitMulOp;
|
|
64
|
+
/**
|
|
65
|
+
* Visit a parse tree produced by `PSCParser.expOp`.
|
|
66
|
+
* @param ctx the parse tree
|
|
67
|
+
* @return the visitor result
|
|
68
|
+
*/
|
|
69
|
+
visitExpOp;
|
|
70
|
+
/**
|
|
71
|
+
* Visit a parse tree produced by `PSCParser.compOp`.
|
|
72
|
+
* @param ctx the parse tree
|
|
73
|
+
* @return the visitor result
|
|
74
|
+
*/
|
|
75
|
+
visitCompOp;
|
|
76
|
+
/**
|
|
77
|
+
* Visit a parse tree produced by `PSCParser.expr`.
|
|
78
|
+
* @param ctx the parse tree
|
|
79
|
+
* @return the visitor result
|
|
80
|
+
*/
|
|
81
|
+
visitExpr;
|
|
82
|
+
/**
|
|
83
|
+
* Visit a parse tree produced by `PSCParser.orExpr`.
|
|
84
|
+
* @param ctx the parse tree
|
|
85
|
+
* @return the visitor result
|
|
86
|
+
*/
|
|
87
|
+
visitOrExpr;
|
|
88
|
+
/**
|
|
89
|
+
* Visit a parse tree produced by `PSCParser.andExpr`.
|
|
90
|
+
* @param ctx the parse tree
|
|
91
|
+
* @return the visitor result
|
|
92
|
+
*/
|
|
93
|
+
visitAndExpr;
|
|
94
|
+
/**
|
|
95
|
+
* Visit a parse tree produced by `PSCParser.compExpr`.
|
|
96
|
+
* @param ctx the parse tree
|
|
97
|
+
* @return the visitor result
|
|
98
|
+
*/
|
|
99
|
+
visitCompExpr;
|
|
100
|
+
/**
|
|
101
|
+
* Visit a parse tree produced by `PSCParser.addExpr`.
|
|
102
|
+
* @param ctx the parse tree
|
|
103
|
+
* @return the visitor result
|
|
104
|
+
*/
|
|
105
|
+
visitAddExpr;
|
|
106
|
+
/**
|
|
107
|
+
* Visit a parse tree produced by `PSCParser.mulExpr`.
|
|
108
|
+
* @param ctx the parse tree
|
|
109
|
+
* @return the visitor result
|
|
110
|
+
*/
|
|
111
|
+
visitMulExpr;
|
|
112
|
+
/**
|
|
113
|
+
* Visit a parse tree produced by `PSCParser.expExpr`.
|
|
114
|
+
* @param ctx the parse tree
|
|
115
|
+
* @return the visitor result
|
|
116
|
+
*/
|
|
117
|
+
visitExpExpr;
|
|
118
|
+
/**
|
|
119
|
+
* Visit a parse tree produced by `PSCParser.unaryExpr`.
|
|
120
|
+
* @param ctx the parse tree
|
|
121
|
+
* @return the visitor result
|
|
122
|
+
*/
|
|
123
|
+
visitUnaryExpr;
|
|
124
|
+
/**
|
|
125
|
+
* Visit a parse tree produced by `PSCParser.notExpr`.
|
|
126
|
+
* @param ctx the parse tree
|
|
127
|
+
* @return the visitor result
|
|
128
|
+
*/
|
|
129
|
+
visitNotExpr;
|
|
130
|
+
/**
|
|
131
|
+
* Visit a parse tree produced by `PSCParser.primaryExpr`.
|
|
132
|
+
* @param ctx the parse tree
|
|
133
|
+
* @return the visitor result
|
|
134
|
+
*/
|
|
135
|
+
visitPrimaryExpr;
|
|
136
|
+
/**
|
|
137
|
+
* Visit a parse tree produced by `PSCParser.groupExpr`.
|
|
138
|
+
* @param ctx the parse tree
|
|
139
|
+
* @return the visitor result
|
|
140
|
+
*/
|
|
141
|
+
visitGroupExpr;
|
|
142
|
+
/**
|
|
143
|
+
* Visit a parse tree produced by `PSCParser.atom`.
|
|
144
|
+
* @param ctx the parse tree
|
|
145
|
+
* @return the visitor result
|
|
146
|
+
*/
|
|
147
|
+
visitAtom;
|
|
148
|
+
/**
|
|
149
|
+
* Visit a parse tree produced by `PSCParser.lits`.
|
|
150
|
+
* @param ctx the parse tree
|
|
151
|
+
* @return the visitor result
|
|
152
|
+
*/
|
|
153
|
+
visitLits;
|
|
154
|
+
/**
|
|
155
|
+
* Visit a parse tree produced by `PSCParser.intLits`.
|
|
156
|
+
* @param ctx the parse tree
|
|
157
|
+
* @return the visitor result
|
|
158
|
+
*/
|
|
159
|
+
visitIntLits;
|
|
160
|
+
/**
|
|
161
|
+
* Visit a parse tree produced by `PSCParser.floatLits`.
|
|
162
|
+
* @param ctx the parse tree
|
|
163
|
+
* @return the visitor result
|
|
164
|
+
*/
|
|
165
|
+
visitFloatLits;
|
|
166
|
+
/**
|
|
167
|
+
* Visit a parse tree produced by `PSCParser.arrayLits`.
|
|
168
|
+
* @param ctx the parse tree
|
|
169
|
+
* @return the visitor result
|
|
170
|
+
*/
|
|
171
|
+
visitArrayLits;
|
|
172
|
+
/**
|
|
173
|
+
* Visit a parse tree produced by `PSCParser.stmts`.
|
|
174
|
+
* @param ctx the parse tree
|
|
175
|
+
* @return the visitor result
|
|
176
|
+
*/
|
|
177
|
+
visitStmts;
|
|
178
|
+
/**
|
|
179
|
+
* Visit a parse tree produced by `PSCParser.stmt`.
|
|
180
|
+
* @param ctx the parse tree
|
|
181
|
+
* @return the visitor result
|
|
182
|
+
*/
|
|
183
|
+
visitStmt;
|
|
184
|
+
/**
|
|
185
|
+
* Visit a parse tree produced by `PSCParser.block`.
|
|
186
|
+
* @param ctx the parse tree
|
|
187
|
+
* @return the visitor result
|
|
188
|
+
*/
|
|
189
|
+
visitBlock;
|
|
190
|
+
/**
|
|
191
|
+
* Visit a parse tree produced by `PSCParser.ifStmt`.
|
|
192
|
+
* @param ctx the parse tree
|
|
193
|
+
* @return the visitor result
|
|
194
|
+
*/
|
|
195
|
+
visitIfStmt;
|
|
196
|
+
/**
|
|
197
|
+
* Visit a parse tree produced by `PSCParser.whileStmt`.
|
|
198
|
+
* @param ctx the parse tree
|
|
199
|
+
* @return the visitor result
|
|
200
|
+
*/
|
|
201
|
+
visitWhileStmt;
|
|
202
|
+
/**
|
|
203
|
+
* Visit a parse tree produced by `PSCParser.doWhileStmt`.
|
|
204
|
+
* @param ctx the parse tree
|
|
205
|
+
* @return the visitor result
|
|
206
|
+
*/
|
|
207
|
+
visitDoWhileStmt;
|
|
208
|
+
/**
|
|
209
|
+
* Visit a parse tree produced by `PSCParser.repeatUntilStmt`.
|
|
210
|
+
* @param ctx the parse tree
|
|
211
|
+
* @return the visitor result
|
|
212
|
+
*/
|
|
213
|
+
visitRepeatUntilStmt;
|
|
214
|
+
/**
|
|
215
|
+
* Visit a parse tree produced by `PSCParser.forStmt`.
|
|
216
|
+
* @param ctx the parse tree
|
|
217
|
+
* @return the visitor result
|
|
218
|
+
*/
|
|
219
|
+
visitForStmt;
|
|
220
|
+
/**
|
|
221
|
+
* Visit a parse tree produced by `PSCParser.asmStmt`.
|
|
222
|
+
* @param ctx the parse tree
|
|
223
|
+
* @return the visitor result
|
|
224
|
+
*/
|
|
225
|
+
visitAsmStmt;
|
|
226
|
+
/**
|
|
227
|
+
* Visit a parse tree produced by `PSCParser.lvalue`.
|
|
228
|
+
* @param ctx the parse tree
|
|
229
|
+
* @return the visitor result
|
|
230
|
+
*/
|
|
231
|
+
visitLvalue;
|
|
232
|
+
/**
|
|
233
|
+
* Visit a parse tree produced by `PSCParser.inputStmt`.
|
|
234
|
+
* @param ctx the parse tree
|
|
235
|
+
* @return the visitor result
|
|
236
|
+
*/
|
|
237
|
+
visitInputStmt;
|
|
238
|
+
/**
|
|
239
|
+
* Visit a parse tree produced by `PSCParser.outputStmt`.
|
|
240
|
+
* @param ctx the parse tree
|
|
241
|
+
* @return the visitor result
|
|
242
|
+
*/
|
|
243
|
+
visitOutputStmt;
|
|
244
|
+
/**
|
|
245
|
+
* Visit a parse tree produced by `PSCParser.subprogram`.
|
|
246
|
+
* @param ctx the parse tree
|
|
247
|
+
* @return the visitor result
|
|
248
|
+
*/
|
|
249
|
+
visitSubprogram;
|
|
250
|
+
/**
|
|
251
|
+
* Visit a parse tree produced by `PSCParser.returnStmt`.
|
|
252
|
+
* @param ctx the parse tree
|
|
253
|
+
* @return the visitor result
|
|
254
|
+
*/
|
|
255
|
+
visitReturnStmt;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=PSCParserVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PSCParserVisitor.js","sourceRoot":"","sources":["../../src/_antlr/PSCParserVisitor.ts"],"names":[],"mappings":"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"}
|
package/dist/error.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ParserRuleContext } from "antlr4";
|
|
2
|
+
export declare class PSCSyntaxError extends Error {
|
|
3
|
+
constructor(line: number, column: number, msg: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class PSCAccessNonExistingVariableError extends Error {
|
|
6
|
+
constructor(ctx: ParserRuleContext | undefined, variable: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class PSCOperationValueTypeMismatchError extends Error {
|
|
9
|
+
constructor(ctx: ParserRuleContext | undefined, operator: string, expectedType: string, got: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class PSCConditionNotBooleanError extends Error {
|
|
12
|
+
constructor(ctx: ParserRuleContext | undefined, got: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class PSCForRangeNotIntegerError extends Error {
|
|
15
|
+
constructor(ctx: ParserRuleContext | undefined, got: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class PSCForVariableReuseError extends Error {
|
|
18
|
+
constructor(ctx: ParserRuleContext | undefined, name: string);
|
|
19
|
+
}
|
|
20
|
+
export declare class PSCInvalidArrayIndexError extends Error {
|
|
21
|
+
constructor(ctx: ParserRuleContext | undefined, index: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class PSCArrayAccessNotArrayError extends Error {
|
|
24
|
+
constructor(ctx: ParserRuleContext | undefined, got: string);
|
|
25
|
+
}
|
|
26
|
+
export declare class PSCUnmatchedArgumentsError extends Error {
|
|
27
|
+
constructor(ctx: ParserRuleContext | undefined, name: string, expectedParams: number, gotParams: number);
|
|
28
|
+
}
|
|
29
|
+
export declare class PSCImpossibleError extends Error {
|
|
30
|
+
constructor(ctx: ParserRuleContext | undefined, message: string);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAahD,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAGtD;AAED,qBAAa,iCAAkC,SAAQ,KAAK;gBAC9C,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM;CAKjE;AAED,qBAAa,kCAAmC,SAAQ,KAAK;gBAEzD,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM;CAMd;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;CAK5D;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;CAK5D;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM;CAK7D;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM;CAK9D;AACD,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;CAK5D;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBAEjD,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM;CAMpB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM;CAKhE"}
|
package/dist/error.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function generateLineColMessage(ctx) {
|
|
2
|
+
if (ctx.stop &&
|
|
3
|
+
!(ctx.start.line == ctx.stop.line && ctx.start.column == ctx.stop.column)) {
|
|
4
|
+
return `(from ln ${ctx.start.line} col ${ctx.start.column} to ln ${ctx.stop.line} col ${ctx.stop.column})`;
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
return `(at ln ${ctx.start.line} col ${ctx.start.column})`;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class PSCSyntaxError extends Error {
|
|
11
|
+
constructor(line, column, msg) {
|
|
12
|
+
super(`Syntax error at line ${line}, column ${column}: ${msg}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class PSCAccessNonExistingVariableError extends Error {
|
|
16
|
+
constructor(ctx, variable) {
|
|
17
|
+
super(`Cannot access variable ${variable}, which does not exists. ${ctx && generateLineColMessage(ctx)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class PSCOperationValueTypeMismatchError extends Error {
|
|
21
|
+
constructor(ctx, operator, expectedType, got) {
|
|
22
|
+
super(`${operator} can only be applied to ${expectedType}, got ${got}. ${ctx && generateLineColMessage(ctx)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class PSCConditionNotBooleanError extends Error {
|
|
26
|
+
constructor(ctx, got) {
|
|
27
|
+
super(`A condition must be evaluated to a boolean, got ${got}. ${ctx && generateLineColMessage(ctx)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class PSCForRangeNotIntegerError extends Error {
|
|
31
|
+
constructor(ctx, got) {
|
|
32
|
+
super(`For loop range must evaluate to an integer, got ${got}. ${ctx && generateLineColMessage(ctx)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class PSCForVariableReuseError extends Error {
|
|
36
|
+
constructor(ctx, name) {
|
|
37
|
+
super(`Cannot reuse loop variable '${name}' in a for loop. ${ctx && generateLineColMessage(ctx)}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class PSCInvalidArrayIndexError extends Error {
|
|
41
|
+
constructor(ctx, index) {
|
|
42
|
+
super(`Array index ${index} is invalid. ${ctx && generateLineColMessage(ctx)}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class PSCArrayAccessNotArrayError extends Error {
|
|
46
|
+
constructor(ctx, got) {
|
|
47
|
+
super(`Cannot access an array index on a non-array value, got ${got}. ${ctx && generateLineColMessage(ctx)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class PSCUnmatchedArgumentsError extends Error {
|
|
51
|
+
constructor(ctx, name, expectedParams, gotParams) {
|
|
52
|
+
super(`Subprogram ${name} expects ${expectedParams} arguments, but got ${gotParams}. ${ctx && generateLineColMessage(ctx)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class PSCImpossibleError extends Error {
|
|
56
|
+
constructor(ctx, message) {
|
|
57
|
+
super(`The following error should not be possible. Please report this bug:\n${message}. ${ctx && generateLineColMessage(ctx)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { PSCTypes } from "./visitor";
|
|
2
|
+
export interface PSCEventParams {
|
|
3
|
+
startLine: number;
|
|
4
|
+
startCol: number;
|
|
5
|
+
endLine?: number;
|
|
6
|
+
endCol?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PreExecStmtParams extends PSCEventParams {
|
|
9
|
+
stmtType: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PostExecStmtParams extends PSCEventParams {
|
|
12
|
+
stmtType: string;
|
|
13
|
+
}
|
|
14
|
+
export type PreWhileCondition = PSCEventParams;
|
|
15
|
+
export interface PostWhileCondition extends PSCEventParams {
|
|
16
|
+
shouldContinue: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type PreDoWhileCondition = PSCEventParams;
|
|
19
|
+
export interface PostDoWhileCondition extends PSCEventParams {
|
|
20
|
+
shouldContinue: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type PreRepeatUntilCondition = PSCEventParams;
|
|
23
|
+
export interface PostRepeatUntilCondition extends PSCEventParams {
|
|
24
|
+
shouldContinue: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ForVariableChangeParams extends PSCEventParams {
|
|
27
|
+
variableName: string;
|
|
28
|
+
oldValue?: number;
|
|
29
|
+
newValue: number;
|
|
30
|
+
}
|
|
31
|
+
export type PreEvalExprParams = PSCEventParams;
|
|
32
|
+
export interface PostEvalExprParams extends PSCEventParams {
|
|
33
|
+
result: PSCTypes;
|
|
34
|
+
}
|
|
35
|
+
type PSCEventParamsMap = {
|
|
36
|
+
pre_exec_stmt: PreExecStmtParams;
|
|
37
|
+
post_exec_stmt: PostExecStmtParams;
|
|
38
|
+
pre_while_condition: PreWhileCondition;
|
|
39
|
+
post_while_condition: PostWhileCondition;
|
|
40
|
+
pre_do_while_condition: PreDoWhileCondition;
|
|
41
|
+
post_do_while_condition: PostDoWhileCondition;
|
|
42
|
+
pre_repeat_until_condition: PreRepeatUntilCondition;
|
|
43
|
+
post_repeat_until_condition: PostRepeatUntilCondition;
|
|
44
|
+
for_variable_change: ForVariableChangeParams;
|
|
45
|
+
pre_eval_expr: PreEvalExprParams;
|
|
46
|
+
post_eval_expr: PostEvalExprParams;
|
|
47
|
+
};
|
|
48
|
+
export type PSCEventType = keyof PSCEventParamsMap;
|
|
49
|
+
export type PSCEventCallback<T extends PSCEventType = PSCEventType> = (params: PSCEventParamsMap[T]) => void;
|
|
50
|
+
export declare class PSCEventBus {
|
|
51
|
+
#private;
|
|
52
|
+
on<T extends PSCEventType>(eventType: T, handler: PSCEventCallback<T>): () => void;
|
|
53
|
+
emit<T extends PSCEventType>(eventType: T, params: PSCEventParamsMap[T]): void;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAEjD,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAErD,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,KAAK,iBAAiB,GAAG;IACvB,aAAa,EAAE,iBAAiB,CAAC;IACjC,cAAc,EAAE,kBAAkB,CAAC;IACnC,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,oBAAoB,EAAE,kBAAkB,CAAC;IACzC,sBAAsB,EAAE,mBAAmB,CAAC;IAC5C,uBAAuB,EAAE,oBAAoB,CAAC;IAC9C,0BAA0B,EAAE,uBAAuB,CAAC;IACpD,2BAA2B,EAAE,wBAAwB,CAAC;IACtD,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IACjC,cAAc,EAAE,kBAAkB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CACpE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KACzB,IAAI,CAAC;AAEV,qBAAa,WAAW;;IAKtB,EAAE,CAAC,CAAC,SAAS,YAAY,EACvB,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC3B,MAAM,IAAI;IAWb,IAAI,CAAC,CAAC,SAAS,YAAY,EACzB,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC3B,IAAI;CAQR"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class PSCEventBus {
|
|
2
|
+
#handlers = {};
|
|
3
|
+
on(eventType, handler) {
|
|
4
|
+
let set = this.#handlers[eventType];
|
|
5
|
+
if (set === undefined) {
|
|
6
|
+
set = this.#handlers[eventType] = new Set();
|
|
7
|
+
}
|
|
8
|
+
set.add(handler);
|
|
9
|
+
return () => {
|
|
10
|
+
set?.delete(handler);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
emit(eventType, params) {
|
|
14
|
+
const handlers = this.#handlers[eventType];
|
|
15
|
+
if (handlers) {
|
|
16
|
+
for (const handler of handlers) {
|
|
17
|
+
handler(params);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAmEA,MAAM,OAAO,WAAW;IACtB,SAAS,GAEL,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,OAA4B;QAE5B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,EAAoB,CAAC;QAChE,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE;YACV,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CACF,SAAY,EACZ,MAA4B;QAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type PSCVisitorOptions } from "./visitor";
|
|
2
|
+
import type { PSCEventCallback, PSCEventType } from "./events";
|
|
3
|
+
export declare class PSCInterpreter {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(options?: Partial<PSCVisitorOptions>);
|
|
6
|
+
interpret(code: string): Promise<void>;
|
|
7
|
+
on(eventType: PSCEventType, handler: PSCEventCallback): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/D,qBAAa,cAAc;;gBAGb,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAQ1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5C,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;CAG7D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CharStream, CommonTokenStream, ErrorListener, Token } from "antlr4";
|
|
2
|
+
import PSCLexer from "./_antlr/PSCLexer";
|
|
3
|
+
import PSCParser from "./_antlr/PSCParser";
|
|
4
|
+
import { PSCInterpretVisitor } from "./visitor";
|
|
5
|
+
import { PSCSyntaxError } from "./error";
|
|
6
|
+
export class PSCInterpreter {
|
|
7
|
+
#visitor;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.#visitor = new PSCInterpretVisitor({
|
|
10
|
+
strictVariableScope: false,
|
|
11
|
+
arrayStartIndex: 1,
|
|
12
|
+
...options, // Override default options with user-provided options
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async interpret(code) {
|
|
16
|
+
// Parse the code
|
|
17
|
+
const lexer = new PSCLexer(new CharStream(code));
|
|
18
|
+
lexer.removeErrorListeners();
|
|
19
|
+
lexer.addErrorListener(new PSCErrorListener());
|
|
20
|
+
const parser = new PSCParser(new CommonTokenStream(lexer));
|
|
21
|
+
parser.removeErrorListeners(); // Remove default error listeners
|
|
22
|
+
parser.addErrorListener(new PSCErrorListener());
|
|
23
|
+
const tree = parser.program();
|
|
24
|
+
await this.#visitor.visit(tree);
|
|
25
|
+
}
|
|
26
|
+
on(eventType, handler) {
|
|
27
|
+
this.#visitor.on(eventType, handler);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class PSCErrorListener extends ErrorListener {
|
|
31
|
+
syntaxError(recognizer, offendingSymbol, line, column, msg) {
|
|
32
|
+
throw new PSCSyntaxError(line, column, msg);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAA0B,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAsB;IAE9B,YAAY,OAAoC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC;YACtC,mBAAmB,EAAE,KAAK;YAC1B,eAAe,EAAE,CAAC;YAClB,GAAG,OAAO,EAAE,sDAAsD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,iBAAiB;QACjB,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,KAAK,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,iCAAiC;QAChE,MAAM,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,EAAE,CAAC,SAAuB,EAAE,OAAyB;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF;AAED,MAAM,gBAAiB,SAAQ,aAAoB;IACxC,WAAW,CAClB,UAAiB,EACjB,eAAsB,EACtB,IAAY,EACZ,MAAc,EACd,GAAW;QAEX,MAAM,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AddExprContext, AndExprContext, ArrayLitsContext, AsmStmtContext, AtomContext, BlockContext, CompExprContext, DoWhileStmtContext, ExpExprContext, ExprContext, FloatLitsContext, ForStmtContext, GroupExprContext, IfStmtContext, InputStmtContext, IntLitsContext, LitsContext, LvalueContext, MulExprContext, NotExprContext, OrExprContext, OutputStmtContext, PrimaryExprContext, ProgramContext, RepeatUntilStmtContext, ReturnStmtContext, StmtContext, StmtsContext, SubprogramContext, UnaryExprContext, WhileStmtContext } from "./_antlr/PSCParser";
|
|
2
|
+
import PSCParserVisitor from "./_antlr/PSCParserVisitor";
|
|
3
|
+
import { type PSCEventCallback, type PSCEventType } from "./events";
|
|
4
|
+
export type PSCVisitorOptions = {
|
|
5
|
+
strictVariableScope: boolean;
|
|
6
|
+
arrayStartIndex: number;
|
|
7
|
+
outputFunction?: (output: string) => void;
|
|
8
|
+
inputFunction?: () => Promise<string>;
|
|
9
|
+
};
|
|
10
|
+
export type PSCSubprogram = (params: PSCTypes[]) => Promise<PSCTypes>;
|
|
11
|
+
export type PSCTypes = string | number | boolean | PSCTypes[] | null | PSCSubprogram | undefined;
|
|
12
|
+
export declare class PSCInterpretVisitor extends PSCParserVisitor<Promise<PSCTypes | Ref | void>> {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(options: PSCVisitorOptions);
|
|
15
|
+
on(eventType: PSCEventType, handler: PSCEventCallback): () => void;
|
|
16
|
+
visitProgram: (ctx: ProgramContext) => Promise<void>;
|
|
17
|
+
visitExpr: (ctx: ExprContext) => Promise<PSCTypes>;
|
|
18
|
+
visitOrExpr: (ctx: OrExprContext) => Promise<PSCTypes>;
|
|
19
|
+
visitAndExpr: (ctx: AndExprContext) => Promise<PSCTypes>;
|
|
20
|
+
visitCompExpr: (ctx: CompExprContext) => Promise<PSCTypes>;
|
|
21
|
+
visitAddExpr: (ctx: AddExprContext) => Promise<PSCTypes>;
|
|
22
|
+
visitMulExpr: (ctx: MulExprContext) => Promise<PSCTypes>;
|
|
23
|
+
visitExpExpr: (ctx: ExpExprContext) => Promise<PSCTypes>;
|
|
24
|
+
visitUnaryExpr: (ctx: UnaryExprContext) => Promise<PSCTypes>;
|
|
25
|
+
visitNotExpr: (ctx: NotExprContext) => Promise<PSCTypes>;
|
|
26
|
+
visitPrimaryExpr: (ctx: PrimaryExprContext) => Promise<PSCTypes>;
|
|
27
|
+
visitGroupExpr: (ctx: GroupExprContext) => Promise<PSCTypes>;
|
|
28
|
+
visitAtom: (ctx: AtomContext) => Promise<PSCTypes>;
|
|
29
|
+
visitLits: (ctx: LitsContext) => Promise<PSCTypes>;
|
|
30
|
+
visitIntLits: (ctx: IntLitsContext) => Promise<number>;
|
|
31
|
+
visitFloatLits: (ctx: FloatLitsContext) => Promise<number>;
|
|
32
|
+
visitArrayLits: (ctx: ArrayLitsContext) => Promise<PSCTypes[]>;
|
|
33
|
+
visitStmts: (ctx: StmtsContext) => Promise<void>;
|
|
34
|
+
visitStmt: (ctx: StmtContext) => Promise<void>;
|
|
35
|
+
visitBlock: (ctx: BlockContext) => Promise<void>;
|
|
36
|
+
visitIfStmt: (ctx: IfStmtContext) => Promise<void>;
|
|
37
|
+
visitWhileStmt: (ctx: WhileStmtContext) => Promise<void>;
|
|
38
|
+
visitDoWhileStmt: (ctx: DoWhileStmtContext) => Promise<void>;
|
|
39
|
+
visitRepeatUntilStmt: (ctx: RepeatUntilStmtContext) => Promise<void>;
|
|
40
|
+
visitForStmt: (ctx: ForStmtContext) => Promise<void>;
|
|
41
|
+
visitAsmStmt: (ctx: AsmStmtContext) => Promise<void>;
|
|
42
|
+
visitLvalue: (ctx: LvalueContext) => Promise<Ref>;
|
|
43
|
+
visitInputStmt: (ctx: InputStmtContext) => Promise<void>;
|
|
44
|
+
visitOutputStmt: (ctx: OutputStmtContext) => Promise<void>;
|
|
45
|
+
visitSubprogram: (ctx: SubprogramContext) => Promise<void>;
|
|
46
|
+
visitReturnStmt: (ctx: ReturnStmtContext) => Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
type Ref<T = PSCTypes> = {
|
|
49
|
+
get: () => T;
|
|
50
|
+
set: (value: T) => void;
|
|
51
|
+
};
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=visitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"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"}
|