@stevenvo780/st-lang 3.0.2 → 3.1.1
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/api.d.ts.map +1 -1
- package/dist/api.js +44 -9
- package/dist/api.js.map +1 -1
- package/dist/parser/parser.d.ts +4 -0
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +213 -92
- package/dist/parser/parser.js.map +1 -1
- package/dist/profiles/classical/first-order.d.ts.map +1 -1
- package/dist/profiles/classical/first-order.js +12 -5
- package/dist/profiles/classical/first-order.js.map +1 -1
- package/dist/profiles/classical/propositional.d.ts.map +1 -1
- package/dist/profiles/classical/propositional.js +583 -14
- package/dist/profiles/classical/propositional.js.map +1 -1
- package/dist/profiles/shared/tableau-engine.d.ts +4 -3
- package/dist/profiles/shared/tableau-engine.d.ts.map +1 -1
- package/dist/profiles/shared/tableau-engine.js +101 -15
- package/dist/profiles/shared/tableau-engine.js.map +1 -1
- package/dist/protocol/handler.d.ts +4 -0
- package/dist/protocol/handler.d.ts.map +1 -1
- package/dist/protocol/handler.js +133 -41
- package/dist/protocol/handler.js.map +1 -1
- package/dist/repl/repl.d.ts +2 -0
- package/dist/repl/repl.d.ts.map +1 -1
- package/dist/repl/repl.js +39 -18
- package/dist/repl/repl.js.map +1 -1
- package/dist/runtime/compat.d.ts +29 -0
- package/dist/runtime/compat.d.ts.map +1 -0
- package/dist/runtime/compat.js +821 -0
- package/dist/runtime/compat.js.map +1 -0
- package/dist/runtime/interpreter.d.ts +3 -0
- package/dist/runtime/interpreter.d.ts.map +1 -1
- package/dist/runtime/interpreter.js +128 -28
- package/dist/runtime/interpreter.js.map +1 -1
- package/dist/tests/compat.test.d.ts +2 -0
- package/dist/tests/compat.test.d.ts.map +1 -0
- package/dist/tests/compat.test.js +247 -0
- package/dist/tests/compat.test.js.map +1 -0
- package/dist/tests/core.test.js +37 -0
- package/dist/tests/core.test.js.map +1 -1
- package/dist/tests/parser.test.js +38 -0
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/profiles.test.js +8 -0
- package/dist/tests/profiles.test.js.map +1 -1
- package/dist/tests/protocol-text-layer.test.d.ts +2 -0
- package/dist/tests/protocol-text-layer.test.d.ts.map +1 -0
- package/dist/tests/protocol-text-layer.test.js +54 -0
- package/dist/tests/protocol-text-layer.test.js.map +1 -0
- package/dist/text-layer/compiler.d.ts.map +1 -1
- package/dist/text-layer/compiler.js +35 -8
- package/dist/text-layer/compiler.js.map +1 -1
- package/dist/types/index.d.ts +27 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -2
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -21,6 +21,7 @@ exports.completion = completion;
|
|
|
21
21
|
exports.render = render;
|
|
22
22
|
const parser_1 = require("./parser/parser");
|
|
23
23
|
const interpreter_1 = require("./runtime/interpreter");
|
|
24
|
+
const compat_1 = require("./runtime/compat");
|
|
24
25
|
const handler_1 = require("./protocol/handler");
|
|
25
26
|
const interface_1 = require("./profiles/interface");
|
|
26
27
|
// ── Funciones estateless (una sola invocación) ────────────────
|
|
@@ -97,23 +98,57 @@ function quickEval(expression) {
|
|
|
97
98
|
function createInterpreter() {
|
|
98
99
|
const inner = new interpreter_1.Interpreter();
|
|
99
100
|
const history = [];
|
|
101
|
+
const replCompatState = (0, compat_1.createReplCompatState)();
|
|
102
|
+
const collectKnownPremises = () => {
|
|
103
|
+
const theory = inner.getTheory();
|
|
104
|
+
return Array.from(new Set([
|
|
105
|
+
...inner.getLetBindings().keys(),
|
|
106
|
+
...theory.axioms.keys(),
|
|
107
|
+
...theory.theorems.keys(),
|
|
108
|
+
]));
|
|
109
|
+
};
|
|
110
|
+
const toResult = (output) => ({
|
|
111
|
+
ok: output.exitCode === 0,
|
|
112
|
+
stdout: output.stdout,
|
|
113
|
+
stderr: output.stderr,
|
|
114
|
+
exitCode: output.exitCode,
|
|
115
|
+
results: output.results,
|
|
116
|
+
diagnostics: output.diagnostics,
|
|
117
|
+
});
|
|
100
118
|
return {
|
|
101
119
|
exec(source) {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
120
|
+
const transformed = (0, compat_1.transformReplInput)(source, replCompatState, {
|
|
121
|
+
knownPremises: collectKnownPremises(),
|
|
122
|
+
});
|
|
123
|
+
let output;
|
|
124
|
+
if (transformed.kind === 'buffered') {
|
|
125
|
+
output = {
|
|
126
|
+
stdout: transformed.message,
|
|
127
|
+
stderr: '',
|
|
128
|
+
exitCode: 0,
|
|
129
|
+
diagnostics: [],
|
|
130
|
+
results: [],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
else if (transformed.kind === 'execute') {
|
|
134
|
+
output = inner.execute(transformed.source, '<repl>');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
output = inner.executeSingle(transformed.source);
|
|
138
|
+
}
|
|
139
|
+
const result = toResult(output);
|
|
111
140
|
history.push(result);
|
|
112
141
|
return result;
|
|
113
142
|
},
|
|
114
143
|
reset() {
|
|
115
144
|
inner.reset();
|
|
116
145
|
history.length = 0;
|
|
146
|
+
replCompatState.nextId = 1;
|
|
147
|
+
replCompatState.pendingPremises = [];
|
|
148
|
+
replCompatState.pendingBlockLines = [];
|
|
149
|
+
replCompatState.pendingBlockBraceDepth = 0;
|
|
150
|
+
replCompatState.pendingBlockProofDepth = 0;
|
|
151
|
+
replCompatState.pendingBlockProofAwaitingShow = [];
|
|
117
152
|
},
|
|
118
153
|
getProfile() {
|
|
119
154
|
const p = inner.getProfile();
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/parser/parser.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare class Parser {
|
|
|
8
8
|
private pos;
|
|
9
9
|
private file;
|
|
10
10
|
diagnostics: Diagnostic[];
|
|
11
|
+
private contextStack;
|
|
11
12
|
private knownFunctionNames;
|
|
12
13
|
private knownTheoryNames;
|
|
13
14
|
private currentProfile;
|
|
@@ -85,6 +86,9 @@ export declare class Parser {
|
|
|
85
86
|
* (para soportar nombres como "Logic", "Theory", etc. que colisionan con keywords)
|
|
86
87
|
*/
|
|
87
88
|
private expectName;
|
|
89
|
+
private contextualize;
|
|
90
|
+
private withContext;
|
|
91
|
+
private describeStatementContext;
|
|
88
92
|
private loc;
|
|
89
93
|
private skipNewlines;
|
|
90
94
|
private advanceToNextStatement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAW,UAAU,EAAkB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/parser/parser.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Parser = void 0;
|
|
7
7
|
const tokens_1 = require("../lexer/tokens");
|
|
8
8
|
const lexer_1 = require("../lexer/lexer");
|
|
9
|
+
const compat_1 = require("../runtime/compat");
|
|
9
10
|
// Modal aliases per profile: maps identifier names to modal formula types
|
|
10
11
|
const MODAL_ALIASES = {
|
|
11
12
|
'deontic.standard': { O: 'box', P: 'diamond', F: 'box_not' },
|
|
@@ -21,6 +22,7 @@ class Parser {
|
|
|
21
22
|
pos = 0;
|
|
22
23
|
file;
|
|
23
24
|
diagnostics = [];
|
|
25
|
+
contextStack = [];
|
|
24
26
|
knownFunctionNames = new Set([
|
|
25
27
|
'typeof',
|
|
26
28
|
'is_valid',
|
|
@@ -40,10 +42,12 @@ class Parser {
|
|
|
40
42
|
this.initialProfile = profile;
|
|
41
43
|
}
|
|
42
44
|
parse(source) {
|
|
43
|
-
const
|
|
45
|
+
const normalizedSource = (0, compat_1.normalizeSTSource)(source);
|
|
46
|
+
const lexer = new lexer_1.Lexer(normalizedSource, this.file, this.initialProfile);
|
|
44
47
|
this.tokens = lexer.tokenize();
|
|
45
48
|
this.diagnostics.push(...lexer.diagnostics);
|
|
46
49
|
this.pos = 0;
|
|
50
|
+
this.contextStack = [];
|
|
47
51
|
const statements = [];
|
|
48
52
|
while (!this.isAtEnd()) {
|
|
49
53
|
this.skipNewlines();
|
|
@@ -75,93 +79,95 @@ class Parser {
|
|
|
75
79
|
// Detección de llamada a función: nombre(...)
|
|
76
80
|
if (this.peek(1) === tokens_1.TokenType.LPAREN &&
|
|
77
81
|
(tok.type === tokens_1.TokenType.IDENTIFIER || this.knownFunctionNames.has(tok.value))) {
|
|
78
|
-
return this.parseFnCall();
|
|
82
|
+
return this.withContext(`llamada a funcion '${tok.value}'`, () => this.parseFnCall());
|
|
79
83
|
}
|
|
80
84
|
// Detección de llamada a método: objeto.metodo(...)
|
|
81
85
|
if (tok.type === tokens_1.TokenType.IDENTIFIER &&
|
|
82
86
|
this.peek(1) === tokens_1.TokenType.DOT &&
|
|
83
87
|
this.peek(2) === tokens_1.TokenType.IDENTIFIER &&
|
|
84
88
|
this.peek(3) === tokens_1.TokenType.LPAREN) {
|
|
85
|
-
return this.parseMemberFnCall();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
89
|
+
return this.withContext(`llamada a metodo '${tok.value}'`, () => this.parseMemberFnCall());
|
|
90
|
+
}
|
|
91
|
+
return this.withContext(this.describeStatementContext(tok), () => {
|
|
92
|
+
switch (tok.type) {
|
|
93
|
+
case tokens_1.TokenType.LOGIC:
|
|
94
|
+
return this.parseLogicDecl();
|
|
95
|
+
case tokens_1.TokenType.AXIOM:
|
|
96
|
+
return this.parseAxiomDecl();
|
|
97
|
+
case tokens_1.TokenType.THEOREM:
|
|
98
|
+
return this.parseTheoremDecl();
|
|
99
|
+
case tokens_1.TokenType.DERIVE:
|
|
100
|
+
return this.parseDeriveCmd();
|
|
101
|
+
case tokens_1.TokenType.CHECK:
|
|
102
|
+
return this.parseCheckCmd();
|
|
103
|
+
case tokens_1.TokenType.PROVE:
|
|
104
|
+
return this.parseProveCmd();
|
|
105
|
+
case tokens_1.TokenType.COUNTERMODEL:
|
|
106
|
+
case tokens_1.TokenType.REFUTE:
|
|
107
|
+
return this.parseCountermodelCmd();
|
|
108
|
+
case tokens_1.TokenType.TRUTH_TABLE:
|
|
109
|
+
return this.parseTruthTableCmd();
|
|
110
|
+
case tokens_1.TokenType.LET:
|
|
111
|
+
return this.parseLetDecl();
|
|
112
|
+
case tokens_1.TokenType.CLAIM:
|
|
113
|
+
return this.parseClaimDecl();
|
|
114
|
+
case tokens_1.TokenType.SUPPORT:
|
|
115
|
+
return this.parseSupportDecl();
|
|
116
|
+
case tokens_1.TokenType.CONFIDENCE:
|
|
117
|
+
return this.parseConfidenceDecl();
|
|
118
|
+
case tokens_1.TokenType.CONTEXT:
|
|
119
|
+
return this.parseContextDecl();
|
|
120
|
+
case tokens_1.TokenType.RENDER:
|
|
121
|
+
return this.parseRenderCmd();
|
|
122
|
+
case tokens_1.TokenType.ANALYZE:
|
|
123
|
+
return this.parseAnalyzeCmd();
|
|
124
|
+
case tokens_1.TokenType.EXPLAIN:
|
|
125
|
+
return this.parseExplainCmd();
|
|
126
|
+
case tokens_1.TokenType.IMPORT:
|
|
127
|
+
return this.parseImportDecl();
|
|
128
|
+
case tokens_1.TokenType.ASSUME:
|
|
129
|
+
return this.parseProofBlock();
|
|
130
|
+
case tokens_1.TokenType.THEORY:
|
|
131
|
+
return this.parseTheoryDecl();
|
|
132
|
+
case tokens_1.TokenType.PRINT:
|
|
133
|
+
return this.parsePrintCmd();
|
|
134
|
+
case tokens_1.TokenType.SET:
|
|
135
|
+
return this.parseSetCmd();
|
|
136
|
+
case tokens_1.TokenType.IF:
|
|
137
|
+
return this.parseIfStmt();
|
|
138
|
+
case tokens_1.TokenType.FOR:
|
|
139
|
+
return this.parseForStmt();
|
|
140
|
+
case tokens_1.TokenType.WHILE:
|
|
141
|
+
return this.parseWhileStmt();
|
|
142
|
+
case tokens_1.TokenType.FN:
|
|
143
|
+
return this.parseFnDecl();
|
|
144
|
+
case tokens_1.TokenType.RETURN:
|
|
145
|
+
return this.parseReturnStmt();
|
|
146
|
+
case tokens_1.TokenType.EXPORT:
|
|
147
|
+
return this.parseExportDecl();
|
|
148
|
+
case tokens_1.TokenType.DEFINE:
|
|
149
|
+
return this.parseDefineDecl();
|
|
150
|
+
case tokens_1.TokenType.UNFOLD:
|
|
151
|
+
return this.parseUnfoldCmd();
|
|
152
|
+
case tokens_1.TokenType.FOLD:
|
|
153
|
+
return this.parseFoldCmd();
|
|
154
|
+
case tokens_1.TokenType.SOURCE_KW:
|
|
155
|
+
return this.parseSourceDecl();
|
|
156
|
+
case tokens_1.TokenType.INTERPRET:
|
|
157
|
+
return this.parseInterpretCmd();
|
|
158
|
+
case tokens_1.TokenType.GLOSSARY:
|
|
159
|
+
return this.parseGlossaryCmd();
|
|
160
|
+
case tokens_1.TokenType.IDENTIFIER:
|
|
161
|
+
throw new Error(this.contextualize(`Statement inesperado: '${tok.value}' (${tok.type})`));
|
|
162
|
+
case tokens_1.TokenType.NEWLINE:
|
|
163
|
+
this.advance();
|
|
164
|
+
return null;
|
|
165
|
+
case tokens_1.TokenType.EOF:
|
|
166
|
+
return null;
|
|
167
|
+
default:
|
|
168
|
+
throw new Error(this.contextualize(`Statement inesperado: '${tok.value}' (${tok.type})`));
|
|
169
|
+
}
|
|
170
|
+
});
|
|
165
171
|
}
|
|
166
172
|
// logic classical.propositional
|
|
167
173
|
parseLogicDecl() {
|
|
@@ -547,12 +553,14 @@ class Parser {
|
|
|
547
553
|
if (this.checkType(tokens_1.TokenType.QED))
|
|
548
554
|
break;
|
|
549
555
|
try {
|
|
550
|
-
const stmt = this.
|
|
556
|
+
const stmt = this.checkType(tokens_1.TokenType.ASSUME)
|
|
557
|
+
? this.parseProofBlock()
|
|
558
|
+
: this.parseStatement();
|
|
551
559
|
if (stmt)
|
|
552
560
|
body.push(stmt);
|
|
553
561
|
}
|
|
554
562
|
catch (e) {
|
|
555
|
-
const message = e instanceof Error ? e.message : 'Error de parseo';
|
|
563
|
+
const message = e instanceof Error ? e.message : 'Error de parseo en bloque de prueba';
|
|
556
564
|
this.diagnostics.push({
|
|
557
565
|
severity: 'error',
|
|
558
566
|
message,
|
|
@@ -563,6 +571,9 @@ class Parser {
|
|
|
563
571
|
this.advanceToNextStatement();
|
|
564
572
|
}
|
|
565
573
|
}
|
|
574
|
+
if (this.isAtEnd()) {
|
|
575
|
+
throw new Error(`Se esperaba 'qed' para cerrar el bloque de prueba abierto en linea ${src.line}, columna ${src.column}`);
|
|
576
|
+
}
|
|
566
577
|
this.expect(tokens_1.TokenType.QED);
|
|
567
578
|
return { kind: 'proof_block', assumptions, goal, body, source: src };
|
|
568
579
|
}
|
|
@@ -1428,8 +1439,8 @@ class Parser {
|
|
|
1428
1439
|
if (this.checkType(type)) {
|
|
1429
1440
|
return this.advance();
|
|
1430
1441
|
}
|
|
1431
|
-
throw new Error(`Se esperaba ${type}, encontrado '${this.current().value}' (${this.current().type}) ` +
|
|
1432
|
-
`en linea ${this.current().line}, columna ${this.current().column}`);
|
|
1442
|
+
throw new Error(this.contextualize(`Se esperaba ${type}, encontrado '${this.current().value}' (${this.current().type}) ` +
|
|
1443
|
+
`en linea ${this.current().line}, columna ${this.current().column}`));
|
|
1433
1444
|
}
|
|
1434
1445
|
expectOneOf(...types) {
|
|
1435
1446
|
for (const type of types) {
|
|
@@ -1437,8 +1448,8 @@ class Parser {
|
|
|
1437
1448
|
return this.advance();
|
|
1438
1449
|
}
|
|
1439
1450
|
}
|
|
1440
|
-
throw new Error(`Se esperaba ${types.join(' o ')}, encontrado '${this.current().value}' (${this.current().type}) ` +
|
|
1441
|
-
`en linea ${this.current().line}, columna ${this.current().column}`);
|
|
1451
|
+
throw new Error(this.contextualize(`Se esperaba ${types.join(' o ')}, encontrado '${this.current().value}' (${this.current().type}) ` +
|
|
1452
|
+
`en linea ${this.current().line}, columna ${this.current().column}`));
|
|
1442
1453
|
}
|
|
1443
1454
|
expectIdent() {
|
|
1444
1455
|
const tok = this.expect(tokens_1.TokenType.IDENTIFIER);
|
|
@@ -1474,8 +1485,95 @@ class Parser {
|
|
|
1474
1485
|
this.advance();
|
|
1475
1486
|
return tok.value;
|
|
1476
1487
|
}
|
|
1477
|
-
throw new Error(`Se esperaba nombre/identificador, encontrado '${tok.value}' (${tok.type}) ` +
|
|
1478
|
-
`en linea ${tok.line}, columna ${tok.column}`);
|
|
1488
|
+
throw new Error(this.contextualize(`Se esperaba nombre/identificador, encontrado '${tok.value}' (${tok.type}) ` +
|
|
1489
|
+
`en linea ${tok.line}, columna ${tok.column}`));
|
|
1490
|
+
}
|
|
1491
|
+
contextualize(message) {
|
|
1492
|
+
if (this.contextStack.length === 0)
|
|
1493
|
+
return message;
|
|
1494
|
+
return `${message} mientras se parseaba ${this.contextStack.join(' > ')}`;
|
|
1495
|
+
}
|
|
1496
|
+
withContext(context, fn) {
|
|
1497
|
+
this.contextStack.push(context);
|
|
1498
|
+
try {
|
|
1499
|
+
return fn();
|
|
1500
|
+
}
|
|
1501
|
+
finally {
|
|
1502
|
+
this.contextStack.pop();
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
describeStatementContext(tok) {
|
|
1506
|
+
switch (tok.type) {
|
|
1507
|
+
case tokens_1.TokenType.LOGIC:
|
|
1508
|
+
return 'declaracion logic';
|
|
1509
|
+
case tokens_1.TokenType.AXIOM:
|
|
1510
|
+
return 'declaracion de axioma';
|
|
1511
|
+
case tokens_1.TokenType.THEOREM:
|
|
1512
|
+
return 'declaracion de teorema';
|
|
1513
|
+
case tokens_1.TokenType.DERIVE:
|
|
1514
|
+
return 'comando derive';
|
|
1515
|
+
case tokens_1.TokenType.CHECK:
|
|
1516
|
+
return 'comando check';
|
|
1517
|
+
case tokens_1.TokenType.PROVE:
|
|
1518
|
+
return 'comando prove';
|
|
1519
|
+
case tokens_1.TokenType.COUNTERMODEL:
|
|
1520
|
+
case tokens_1.TokenType.REFUTE:
|
|
1521
|
+
return 'comando countermodel';
|
|
1522
|
+
case tokens_1.TokenType.TRUTH_TABLE:
|
|
1523
|
+
return 'comando truth_table';
|
|
1524
|
+
case tokens_1.TokenType.LET:
|
|
1525
|
+
return 'declaracion let';
|
|
1526
|
+
case tokens_1.TokenType.CLAIM:
|
|
1527
|
+
return 'declaracion claim';
|
|
1528
|
+
case tokens_1.TokenType.SUPPORT:
|
|
1529
|
+
return 'declaracion support';
|
|
1530
|
+
case tokens_1.TokenType.CONFIDENCE:
|
|
1531
|
+
return 'declaracion confidence';
|
|
1532
|
+
case tokens_1.TokenType.CONTEXT:
|
|
1533
|
+
return 'declaracion context';
|
|
1534
|
+
case tokens_1.TokenType.RENDER:
|
|
1535
|
+
return 'comando render';
|
|
1536
|
+
case tokens_1.TokenType.ANALYZE:
|
|
1537
|
+
return 'comando analyze';
|
|
1538
|
+
case tokens_1.TokenType.EXPLAIN:
|
|
1539
|
+
return 'comando explain';
|
|
1540
|
+
case tokens_1.TokenType.IMPORT:
|
|
1541
|
+
return 'declaracion import';
|
|
1542
|
+
case tokens_1.TokenType.ASSUME:
|
|
1543
|
+
return 'bloque de prueba';
|
|
1544
|
+
case tokens_1.TokenType.THEORY:
|
|
1545
|
+
return 'declaracion theory';
|
|
1546
|
+
case tokens_1.TokenType.PRINT:
|
|
1547
|
+
return 'comando print';
|
|
1548
|
+
case tokens_1.TokenType.SET:
|
|
1549
|
+
return 'comando set';
|
|
1550
|
+
case tokens_1.TokenType.IF:
|
|
1551
|
+
return 'sentencia if';
|
|
1552
|
+
case tokens_1.TokenType.FOR:
|
|
1553
|
+
return 'sentencia for';
|
|
1554
|
+
case tokens_1.TokenType.WHILE:
|
|
1555
|
+
return 'sentencia while';
|
|
1556
|
+
case tokens_1.TokenType.FN:
|
|
1557
|
+
return 'declaracion fn';
|
|
1558
|
+
case tokens_1.TokenType.RETURN:
|
|
1559
|
+
return 'sentencia return';
|
|
1560
|
+
case tokens_1.TokenType.EXPORT:
|
|
1561
|
+
return 'declaracion export';
|
|
1562
|
+
case tokens_1.TokenType.DEFINE:
|
|
1563
|
+
return 'declaracion define';
|
|
1564
|
+
case tokens_1.TokenType.UNFOLD:
|
|
1565
|
+
return 'comando unfold';
|
|
1566
|
+
case tokens_1.TokenType.FOLD:
|
|
1567
|
+
return 'comando fold';
|
|
1568
|
+
case tokens_1.TokenType.SOURCE_KW:
|
|
1569
|
+
return 'declaracion source';
|
|
1570
|
+
case tokens_1.TokenType.INTERPRET:
|
|
1571
|
+
return 'comando interpret';
|
|
1572
|
+
case tokens_1.TokenType.GLOSSARY:
|
|
1573
|
+
return 'comando glossary';
|
|
1574
|
+
default:
|
|
1575
|
+
return `statement '${tok.value}'`;
|
|
1576
|
+
}
|
|
1479
1577
|
}
|
|
1480
1578
|
loc() {
|
|
1481
1579
|
const tok = this.current();
|
|
@@ -1527,14 +1625,37 @@ class Parser {
|
|
|
1527
1625
|
tokens_1.TokenType.INTERPRET,
|
|
1528
1626
|
tokens_1.TokenType.GLOSSARY,
|
|
1529
1627
|
]);
|
|
1628
|
+
let parenDepth = 0;
|
|
1629
|
+
let braceDepth = 0;
|
|
1630
|
+
let bracketDepth = 0;
|
|
1530
1631
|
while (!this.isAtEnd()) {
|
|
1531
|
-
if (this.checkType(tokens_1.TokenType.NEWLINE)
|
|
1632
|
+
if (this.checkType(tokens_1.TokenType.NEWLINE) &&
|
|
1633
|
+
parenDepth === 0 &&
|
|
1634
|
+
braceDepth === 0 &&
|
|
1635
|
+
bracketDepth === 0) {
|
|
1532
1636
|
this.skipNewlines();
|
|
1533
1637
|
return;
|
|
1534
1638
|
}
|
|
1535
|
-
if (
|
|
1639
|
+
if (parenDepth === 0 &&
|
|
1640
|
+
braceDepth === 0 &&
|
|
1641
|
+
bracketDepth === 0 &&
|
|
1642
|
+
statementStarters.has(this.current().type)) {
|
|
1536
1643
|
return; // Encontramos el inicio del siguiente statement
|
|
1537
1644
|
}
|
|
1645
|
+
if (this.checkType(tokens_1.TokenType.LPAREN))
|
|
1646
|
+
parenDepth += 1;
|
|
1647
|
+
else if (this.checkType(tokens_1.TokenType.RPAREN))
|
|
1648
|
+
parenDepth = Math.max(0, parenDepth - 1);
|
|
1649
|
+
else if (this.checkType(tokens_1.TokenType.LBRACE))
|
|
1650
|
+
braceDepth += 1;
|
|
1651
|
+
else if (this.checkType(tokens_1.TokenType.RBRACE))
|
|
1652
|
+
braceDepth = Math.max(0, braceDepth - 1);
|
|
1653
|
+
else if (this.checkType(tokens_1.TokenType.LBRACKET) || this.checkType(tokens_1.TokenType.LBRACKET_DOUBLE)) {
|
|
1654
|
+
bracketDepth += 1;
|
|
1655
|
+
}
|
|
1656
|
+
else if (this.checkType(tokens_1.TokenType.RBRACKET) || this.checkType(tokens_1.TokenType.RBRACKET_DOUBLE)) {
|
|
1657
|
+
bracketDepth = Math.max(0, bracketDepth - 1);
|
|
1658
|
+
}
|
|
1538
1659
|
this.advance();
|
|
1539
1660
|
}
|
|
1540
1661
|
}
|