@rsconcept/domain 1.7.0 → 1.7.2
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/{analyzer-CqUJ3FO9.d.ts → analyzer-QxWs73gP.d.ts} +2 -2
- package/dist/{ast-annotations-DvB1VcUv.d.ts → ast-annotations-CtF7C9uK.d.ts} +2 -2
- package/dist/{calculator-DKxDpTdT.d.ts → calculator-REeX2ZS1.d.ts} +2 -2
- package/dist/{error-CLnXbkly.d.ts → error-toW0TUHF.d.ts} +6 -1
- package/dist/index.d.ts +4 -4
- package/dist/library/rsengine.d.ts +1 -1
- package/dist/library/rsform-api.d.ts +1 -1
- package/dist/library/rsform.d.ts +1 -1
- package/dist/rslang/ast-annotations.d.ts +1 -1
- package/dist/rslang/error.d.ts +1 -1
- package/dist/rslang/error.js +5 -0
- package/dist/rslang/error.js.map +1 -1
- package/dist/rslang/eval/calculator.d.ts +1 -1
- package/dist/rslang/eval/evaluator.d.ts +1 -1
- package/dist/rslang/index.d.ts +4 -4
- package/dist/rslang/labels.d.ts +1 -1
- package/dist/rslang/labels.js +1 -1
- package/dist/rslang/labels.js.map +1 -1
- package/dist/rslang/parser/normalize.js +5 -1
- package/dist/rslang/parser/normalize.js.map +1 -1
- package/dist/rslang/parser/syntax-errors/index.d.ts +22 -0
- package/dist/rslang/parser/syntax-errors/index.js +2 -0
- package/dist/rslang/semantic/analyzer.d.ts +1 -1
- package/dist/rslang/semantic/analyzer.js +1 -1
- package/dist/rslang/semantic/type-auditor.d.ts +1 -1
- package/dist/rslang/semantic/value-auditor.d.ts +1 -1
- package/dist/{rslang/parser/syntax-errors.js → syntax-errors-B6c2vsan.js} +421 -233
- package/dist/syntax-errors-B6c2vsan.js.map +1 -0
- package/package.json +1 -1
- package/src/rslang/error.ts +5 -0
- package/src/rslang/labels.ts +1 -1
- package/src/rslang/parser/README.md +73 -0
- package/src/rslang/parser/normalize.ts +5 -1
- package/src/rslang/parser/parser.test.ts +53 -0
- package/src/rslang/parser/syntax-errors/README.md +61 -0
- package/src/rslang/parser/syntax-errors/ast-utils.ts +112 -0
- package/src/rslang/parser/syntax-errors/classify.ts +70 -0
- package/src/rslang/parser/syntax-errors/context.ts +25 -0
- package/src/rslang/parser/syntax-errors/error-builders.ts +28 -0
- package/src/rslang/parser/syntax-errors/expression-errors.ts +255 -0
- package/src/rslang/parser/syntax-errors/function-calls.ts +76 -0
- package/src/rslang/parser/syntax-errors/generators.ts +315 -0
- package/src/rslang/parser/syntax-errors/incomplete-formal.ts +68 -0
- package/src/rslang/parser/syntax-errors/incomplete-operands.ts +184 -0
- package/src/rslang/parser/syntax-errors/index.ts +102 -0
- package/src/rslang/parser/syntax-errors/trailing-slot.ts +45 -0
- package/dist/rslang/parser/syntax-errors.d.ts +0 -14
- package/dist/rslang/parser/syntax-errors.js.map +0 -1
- package/src/rslang/parser/syntax-errors.ts +0 -929
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AstNode } from "./ast-C8sIpKdL.js";
|
|
2
2
|
import { f as ExpressionType, g as TypeClass } from "./typification-Dk-fisgO.js";
|
|
3
|
-
import { i as RSErrorDescription } from "./error-
|
|
3
|
+
import { i as RSErrorDescription } from "./error-toW0TUHF.js";
|
|
4
4
|
import { t as ValueClass } from "./value-class-CNI-lqXJ.js";
|
|
5
5
|
|
|
6
6
|
//#region src/rslang/semantic/analyzer.d.ts
|
|
@@ -36,4 +36,4 @@ declare class RSLangAnalyzer {
|
|
|
36
36
|
}
|
|
37
37
|
//#endregion
|
|
38
38
|
export { RSLangAnalyzer as a, AnalysisOptions as i, AnalysisFast as n, AnalysisFull as r, AnalysisBase as t };
|
|
39
|
-
//# sourceMappingURL=analyzer-
|
|
39
|
+
//# sourceMappingURL=analyzer-QxWs73gP.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AstNode } from "./ast-C8sIpKdL.js";
|
|
2
2
|
import { f as ExpressionType } from "./typification-Dk-fisgO.js";
|
|
3
|
-
import { a as RSErrorInfo, r as RSErrorCode } from "./error-
|
|
3
|
+
import { a as RSErrorInfo, r as RSErrorCode } from "./error-toW0TUHF.js";
|
|
4
4
|
|
|
5
5
|
//#region src/rslang/ast-annotations.d.ts
|
|
6
6
|
/** Appends {@link ExpressionType} onto the node's `annotation.rsType`. */
|
|
@@ -13,4 +13,4 @@ declare function annotateError(node: AstNode, code: RSErrorCode, params?: readon
|
|
|
13
13
|
declare function readErrorAnnotation(node: AstNode): RSErrorInfo | null;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { readTypeAnnotation as i, annotateType as n, readErrorAnnotation as r, annotateError as t };
|
|
16
|
-
//# sourceMappingURL=ast-annotations-
|
|
16
|
+
//# sourceMappingURL=ast-annotations-CtF7C9uK.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AstNode } from "./ast-C8sIpKdL.js";
|
|
2
2
|
import { f as ExpressionType } from "./typification-Dk-fisgO.js";
|
|
3
|
-
import { i as RSErrorDescription } from "./error-
|
|
3
|
+
import { i as RSErrorDescription } from "./error-toW0TUHF.js";
|
|
4
4
|
import { l as Value } from "./value-BduA_ZGp.js";
|
|
5
5
|
|
|
6
6
|
//#region src/rslang/eval/calculator.d.ts
|
|
@@ -36,4 +36,4 @@ declare class RSCalculator {
|
|
|
36
36
|
}
|
|
37
37
|
//#endregion
|
|
38
38
|
export { CalculatorResult as n, RSCalculator as r, CalculatorEvaluateOptions as t };
|
|
39
|
-
//# sourceMappingURL=calculator-
|
|
39
|
+
//# sourceMappingURL=calculator-REeX2ZS1.d.ts.map
|
|
@@ -37,6 +37,11 @@ declare const RSErrorCode: {
|
|
|
37
37
|
readonly expectedDeclarativeBody: 33820;
|
|
38
38
|
readonly expectedImperativeBody: 33821;
|
|
39
39
|
readonly expectedRecursiveBody: 33822;
|
|
40
|
+
readonly expectedQuantifierDomain: 33823;
|
|
41
|
+
readonly expectedRightOperand: 33824;
|
|
42
|
+
readonly expectedUnaryOperand: 33825;
|
|
43
|
+
readonly globalFuncParenCall: 33826;
|
|
44
|
+
readonly expectedArgument: 33827;
|
|
40
45
|
readonly expectedLocal: 33813;
|
|
41
46
|
readonly expectedType: 33814;
|
|
42
47
|
readonly localDoubleDeclare: 10241;
|
|
@@ -101,4 +106,4 @@ declare function getRSErrorPrefix(code: RSErrorCode): string;
|
|
|
101
106
|
declare function isCritical(code: RSErrorCode): boolean;
|
|
102
107
|
//#endregion
|
|
103
108
|
export { RSErrorInfo as a, RSErrorDescription as i, RSErrorClass as n, getRSErrorPrefix as o, RSErrorCode as r, isCritical as s, ErrorReporter as t };
|
|
104
|
-
//# sourceMappingURL=error-
|
|
109
|
+
//# sourceMappingURL=error-toW0TUHF.d.ts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -9,15 +9,15 @@ import { a as TOKEN_ERROR, c as flattenAst, d as printAst, f as visitAstDFS, i a
|
|
|
9
9
|
import { t as Branded } from "./branded-ZlzIcxzu.js";
|
|
10
10
|
import { n as generateStub, t as applyHash_fnv1a } from "./hash-Y8I4c6Al.js";
|
|
11
11
|
import { O as makeTypePath, b as Typification, d as EmptySetT, f as ExpressionType, g as TypeClass, m as LogicT, t as AnyTypificationT, v as TypeID, y as TypePath } from "./typification-Dk-fisgO.js";
|
|
12
|
-
import { i as RSErrorDescription, r as RSErrorCode } from "./error-
|
|
13
|
-
import { i as readTypeAnnotation, r as readErrorAnnotation } from "./ast-annotations-
|
|
12
|
+
import { i as RSErrorDescription, r as RSErrorCode } from "./error-toW0TUHF.js";
|
|
13
|
+
import { i as readTypeAnnotation, r as readErrorAnnotation } from "./ast-annotations-CtF7C9uK.js";
|
|
14
14
|
import { d as ValuePath, l as Value, o as TUPLE_ID, p as makeValuePath } from "./value-BduA_ZGp.js";
|
|
15
|
-
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "./calculator-
|
|
15
|
+
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "./calculator-REeX2ZS1.js";
|
|
16
16
|
import { d as printValue } from "./value-api-B6T6f4Ia.js";
|
|
17
17
|
import { t as parser } from "./parser-Bwd8LxJ1.js";
|
|
18
18
|
import { t as TokenID } from "./token-DeXAmzwr.js";
|
|
19
19
|
import { t as ValueClass } from "./value-class-CNI-lqXJ.js";
|
|
20
|
-
import { a as RSLangAnalyzer, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "./analyzer-
|
|
20
|
+
import { a as RSLangAnalyzer, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "./analyzer-QxWs73gP.js";
|
|
21
21
|
import { n as ArgumentsType } from "./arguments-extractor-1acwjQNc.js";
|
|
22
22
|
import { n as applyAsciiTypeSubstitutions, r as parseTypeText } from "./typification-parser-BBVx1RxP.js";
|
|
23
23
|
import { n as TypificationNodeData, t as TypificationGraph } from "./typification-graph-6HcZ-rKH.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AstNode } from "../ast-C8sIpKdL.js";
|
|
2
2
|
import { l as Value } from "../value-BduA_ZGp.js";
|
|
3
|
-
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../calculator-
|
|
3
|
+
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../calculator-REeX2ZS1.js";
|
|
4
4
|
import { CstType, RSForm } from "./rsform.js";
|
|
5
5
|
import { BasicBinding, BasicsContext, EvalStatus, RSModel } from "./rsmodel.js";
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as LibraryItem } from "../library-CYun28Xz.js";
|
|
2
2
|
import { g as TypeClass, y as TypePath } from "../typification-Dk-fisgO.js";
|
|
3
3
|
import { t as ValueClass } from "../value-class-CNI-lqXJ.js";
|
|
4
|
-
import { r as AnalysisFull } from "../analyzer-
|
|
4
|
+
import { r as AnalysisFull } from "../analyzer-QxWs73gP.js";
|
|
5
5
|
import { ArgumentValue, Constituenta, CstClass, CstStatus, CstType, RSForm, RSFormStats } from "./rsform.js";
|
|
6
6
|
|
|
7
7
|
//#region src/library/rsform-api.d.ts
|
package/dist/library/rsform.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as Graph } from "../graph-DR8rL2o3.js";
|
|
2
2
|
import { i as LibraryItemReference, n as CurrentVersion, r as LibraryItem, s as VersionInfo } from "../library-CYun28Xz.js";
|
|
3
3
|
import { f as ExpressionType, y as TypePath } from "../typification-Dk-fisgO.js";
|
|
4
|
-
import { a as RSLangAnalyzer, t as AnalysisBase } from "../analyzer-
|
|
4
|
+
import { a as RSLangAnalyzer, t as AnalysisBase } from "../analyzer-QxWs73gP.js";
|
|
5
5
|
//#region src/library/rsform.d.ts
|
|
6
6
|
/** Represents {@link Constituenta} type. */
|
|
7
7
|
declare const CstType: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as readTypeAnnotation, n as annotateType, r as readErrorAnnotation, t as annotateError } from "../ast-annotations-
|
|
1
|
+
import { i as readTypeAnnotation, n as annotateType, r as readErrorAnnotation, t as annotateError } from "../ast-annotations-CtF7C9uK.js";
|
|
2
2
|
export { annotateError, annotateType, readErrorAnnotation, readTypeAnnotation };
|
package/dist/rslang/error.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as RSErrorInfo, i as RSErrorDescription, n as RSErrorClass, o as getRSErrorPrefix, r as RSErrorCode, s as isCritical, t as ErrorReporter } from "../error-
|
|
1
|
+
import { a as RSErrorInfo, i as RSErrorDescription, n as RSErrorClass, o as getRSErrorPrefix, r as RSErrorCode, s as isCritical, t as ErrorReporter } from "../error-toW0TUHF.js";
|
|
2
2
|
export { ErrorReporter, RSErrorClass, RSErrorCode, RSErrorDescription, RSErrorInfo, getRSErrorPrefix, isCritical };
|
package/dist/rslang/error.js
CHANGED
|
@@ -24,6 +24,11 @@ const RSErrorCode = {
|
|
|
24
24
|
expectedDeclarativeBody: 33820,
|
|
25
25
|
expectedImperativeBody: 33821,
|
|
26
26
|
expectedRecursiveBody: 33822,
|
|
27
|
+
expectedQuantifierDomain: 33823,
|
|
28
|
+
expectedRightOperand: 33824,
|
|
29
|
+
expectedUnaryOperand: 33825,
|
|
30
|
+
globalFuncParenCall: 33826,
|
|
31
|
+
expectedArgument: 33827,
|
|
27
32
|
expectedLocal: 33813,
|
|
28
33
|
expectedType: 33814,
|
|
29
34
|
localDoubleDeclare: 10241,
|
package/dist/rslang/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","names":[],"sources":["../../src/rslang/error.ts"],"sourcesContent":["/** Module: Error types and functions. */\n\n/** Represents error class. */\nexport const RSErrorClass = {\n LEXER: 0,\n PARSER: 1,\n SEMANTIC: 2,\n EVALUATION: 3,\n UNKNOWN: 4\n} as const;\nexport type RSErrorClass = (typeof RSErrorClass)[keyof typeof RSErrorClass];\n\n/** Represents RSLang expression error information. */\nexport interface RSErrorInfo {\n code: RSErrorCode;\n params?: readonly string[];\n}\n\n/** Represents RSLang expression error description. */\nexport interface RSErrorDescription extends RSErrorInfo {\n from: number;\n to: number;\n}\n\n/** Error reporter function type. */\nexport type ErrorReporter = (error: RSErrorDescription) => void;\n\n/** Represents RSLang expression error types. */\nexport const RSErrorCode = {\n unknownSyntax: 0x8400, // 33792\n forbiddenCharacter: 0x8401, // 33793\n bracketMismatch: 0x8409, // 33801\n doubleParenthesis: 0x840a, // 33802\n missingOpenBracket: 0x840b, // 33803\n missingCloseBracket: 0x840c, // 33804\n invalidFilterSyntax: 0x8417, // 33815\n expectedFunctionBody: 0x8418, // 33816\n expectedExpressionBody: 0x8419, // 33817\n expectedLogicBody: 0x841a, // 33818\n expectedQuantifierBody: 0x841b, // 33819\n expectedDeclarativeBody: 0x841c, // 33820\n expectedImperativeBody: 0x841d, // 33821\n expectedRecursiveBody: 0x841e, // 33822\n expectedLocal: 0x8415, // 33813\n expectedType: 0x8416, // 33814\n\n localDoubleDeclare: 0x2801, // 10241\n localNotUsed: 0x2802, // 10242\n\n localUndeclared: 0x8801, // 34817\n localShadowing: 0x8802, // 34818\n\n typesNotEqual: 0x8803, // 34819\n globalNotTyped: 0x8804, // 34820\n invalidDecart: 0x8805, // 34821\n invalidBoolean: 0x8806, // 34822\n invalidTypeOperation: 0x8807, // 34823\n invalidCard: 0x8808, // 34824\n invalidDebool: 0x8809, // 34825\n globalFuncWithoutArgs: 0x880b, // 34827\n invalidReduce: 0x8810, // 34832\n invalidEnumeration: 0x8813, // 34835\n projectionSetArgumentNotSet: 0x8830, // 34864\n projectionSetArgumentNotTupleSet: 0x8831, // 34865\n projectionSetIndexOutOfRange: 0x8832, // 34866\n projectionTupleArgumentNotTuple: 0x8833, // 34867\n projectionTupleIndexOutOfRange: 0x8834, // 34868\n invalidCortegeDeclare: 0x8814, // 34836\n localOutOfScope: 0x8815, // 34837\n invalidElementPredicate: 0x8816, // 34838\n invalidEmptySetUsage: 0x8817, // 34839\n invalidArgsArity: 0x8818, // 34840\n invalidArgumentType: 0x8819, // 34841\n globalStructure: 0x881c, // 34844\n radicalUsage: 0x8821, // 34849\n invalidFilterArgumentType: 0x8822, // 34850\n invalidFilterArity: 0x8823, // 34851\n arithmeticNotSupported: 0x8824, // 34852\n typesNotCompatible: 0x8825, // 34853\n orderingNotSupported: 0x8826, // 34854\n expectedLogic: 0x8827, // 34855\n expectedSetexpr: 0x8828, // 34856\n invalidArgumentCortegeDeclare: 0x8829, // 34857\n invalidQuantifierDomain: 0x882a, // 34858\n invalidFilterParameterType: 0x882b, // 34859\n invalidFilterIndex: 0x882c, // 34860\n invalidFilterBooleanEchelon: 0x882d, // 34861\n localOutOfScopeParentheses: 0x882e, // 34862\n localUndeclaredInSubexpr: 0x882f, // 34863\n\n globalNoValue: 0x8840, // 34880\n invalidPropertyUsage: 0x8841, // 34881\n\n // Value evaluation (runtime)\n calcUnknownError: 0x8100, // 35328\n setOverflow: 0x8101, // 35329\n booleanBaseLimit: 0x8102, // 35330\n calcGlobalMissing: 0x8103, // 35331\n iterationsLimit: 0x8104, // 35332\n calcInvalidDebool: 0x8105, // 35333\n iterateInfinity: 0x8106, // 35334\n calculationNotSupported: 0x8107, // 35335\n calcInvalidData: 0x8108, // 35336\n\n cstEmptyDerived: 0x8861, // 34913\n definitionNotAllowed: 0x8862 // 34914\n} as const;\nexport type RSErrorCode = (typeof RSErrorCode)[keyof typeof RSErrorCode];\n\nconst ERROR_EVALUATION_MASK = 0x0100;\nconst ERROR_LEXER_MASK = 0x0200;\nconst ERROR_PARSER_MASK = 0x0400;\nconst ERROR_SEMANTIC_MASK = 0x0800;\n\n/** Infers error class from error type (code). */\nfunction inferErrorClass(error: RSErrorCode): RSErrorClass {\n if ((error & ERROR_EVALUATION_MASK) !== 0) {\n return RSErrorClass.EVALUATION;\n } else if ((error & ERROR_LEXER_MASK) !== 0) {\n return RSErrorClass.LEXER;\n } else if ((error & ERROR_PARSER_MASK) !== 0) {\n return RSErrorClass.PARSER;\n } else if ((error & ERROR_SEMANTIC_MASK) !== 0) {\n return RSErrorClass.SEMANTIC;\n } else {\n return RSErrorClass.UNKNOWN;\n }\n}\n\n/** Generate ErrorID label. */\nexport function getRSErrorPrefix(code: RSErrorCode): string {\n const id = code.toString(16).toUpperCase();\n // prettier-ignore\n switch (inferErrorClass(code)) {\n case RSErrorClass.LEXER: return 'L' + id;\n case RSErrorClass.PARSER: return 'P' + id;\n case RSErrorClass.SEMANTIC: return 'S' + id;\n case RSErrorClass.EVALUATION: return 'E' + id;\n case RSErrorClass.UNKNOWN: return 'U' + id;\n }\n}\n\n/** Checks if error is critical. */\nexport function isCritical(code: RSErrorCode): boolean {\n return code !== RSErrorCode.localDoubleDeclare && code !== RSErrorCode.localNotUsed;\n}\n"],"mappings":";;;AAGA,MAAa,eAAe;CAC1B,OAAO;CACP,QAAQ;CACR,UAAU;CACV,YAAY;CACZ,SAAS;AACX;;AAmBA,MAAa,cAAc;CACzB,eAAe;CACf,oBAAoB;CACpB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,mBAAmB;CACnB,wBAAwB;CACxB,yBAAyB;CACzB,wBAAwB;CACxB,uBAAuB;CACvB,eAAe;CACf,cAAc;CAEd,oBAAoB;CACpB,cAAc;CAEd,iBAAiB;CACjB,gBAAgB;CAEhB,eAAe;CACf,gBAAgB;CAChB,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,aAAa;CACb,eAAe;CACf,uBAAuB;CACvB,eAAe;CACf,oBAAoB;CACpB,6BAA6B;CAC7B,kCAAkC;CAClC,8BAA8B;CAC9B,iCAAiC;CACjC,gCAAgC;CAChC,uBAAuB;CACvB,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,qBAAqB;CACrB,iBAAiB;CACjB,cAAc;CACd,2BAA2B;CAC3B,oBAAoB;CACpB,wBAAwB;CACxB,oBAAoB;CACpB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,+BAA+B;CAC/B,yBAAyB;CACzB,4BAA4B;CAC5B,oBAAoB;CACpB,6BAA6B;CAC7B,4BAA4B;CAC5B,0BAA0B;CAE1B,eAAe;CACf,sBAAsB;CAGtB,kBAAkB;CAClB,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB,iBAAiB;CACjB,yBAAyB;CACzB,iBAAiB;CAEjB,iBAAiB;CACjB,sBAAsB;AACxB;AAGA,MAAM,wBAAwB;AAC9B,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAC1B,MAAM,sBAAsB;;AAG5B,SAAS,gBAAgB,OAAkC;CACzD,KAAK,QAAQ,2BAA2B,GACtC,OAAO,aAAa;MACf,KAAK,QAAQ,sBAAsB,GACxC,OAAO,aAAa;MACf,KAAK,QAAQ,uBAAuB,GACzC,OAAO,aAAa;MACf,KAAK,QAAQ,yBAAyB,GAC3C,OAAO,aAAa;MAEpB,OAAO,aAAa;AAExB;;AAGA,SAAgB,iBAAiB,MAA2B;CAC1D,MAAM,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC,YAAY;CAEzC,QAAQ,gBAAgB,IAAI,GAA5B;EACE,KAAK,aAAa,OAAO,OAAO,MAAM;EACtC,KAAK,aAAa,QAAQ,OAAO,MAAM;EACvC,KAAK,aAAa,UAAU,OAAO,MAAM;EACzC,KAAK,aAAa,YAAY,OAAO,MAAM;EAC3C,KAAK,aAAa,SAAS,OAAO,MAAM;CAC1C;AACF;;AAGA,SAAgB,WAAW,MAA4B;CACrD,OAAO,SAAS,YAAY,sBAAsB,SAAS,YAAY;AACzE"}
|
|
1
|
+
{"version":3,"file":"error.js","names":[],"sources":["../../src/rslang/error.ts"],"sourcesContent":["/** Module: Error types and functions. */\n\n/** Represents error class. */\nexport const RSErrorClass = {\n LEXER: 0,\n PARSER: 1,\n SEMANTIC: 2,\n EVALUATION: 3,\n UNKNOWN: 4\n} as const;\nexport type RSErrorClass = (typeof RSErrorClass)[keyof typeof RSErrorClass];\n\n/** Represents RSLang expression error information. */\nexport interface RSErrorInfo {\n code: RSErrorCode;\n params?: readonly string[];\n}\n\n/** Represents RSLang expression error description. */\nexport interface RSErrorDescription extends RSErrorInfo {\n from: number;\n to: number;\n}\n\n/** Error reporter function type. */\nexport type ErrorReporter = (error: RSErrorDescription) => void;\n\n/** Represents RSLang expression error types. */\nexport const RSErrorCode = {\n unknownSyntax: 0x8400, // 33792\n forbiddenCharacter: 0x8401, // 33793\n bracketMismatch: 0x8409, // 33801\n doubleParenthesis: 0x840a, // 33802\n missingOpenBracket: 0x840b, // 33803\n missingCloseBracket: 0x840c, // 33804\n invalidFilterSyntax: 0x8417, // 33815\n expectedFunctionBody: 0x8418, // 33816\n expectedExpressionBody: 0x8419, // 33817\n expectedLogicBody: 0x841a, // 33818\n expectedQuantifierBody: 0x841b, // 33819\n expectedDeclarativeBody: 0x841c, // 33820\n expectedImperativeBody: 0x841d, // 33821\n expectedRecursiveBody: 0x841e, // 33822\n expectedQuantifierDomain: 0x841f, // 33823\n expectedRightOperand: 0x8420, // 33824\n expectedUnaryOperand: 0x8421, // 33825\n globalFuncParenCall: 0x8422, // 33826\n expectedArgument: 0x8423, // 33827\n expectedLocal: 0x8415, // 33813\n expectedType: 0x8416, // 33814\n\n localDoubleDeclare: 0x2801, // 10241\n localNotUsed: 0x2802, // 10242\n\n localUndeclared: 0x8801, // 34817\n localShadowing: 0x8802, // 34818\n\n typesNotEqual: 0x8803, // 34819\n globalNotTyped: 0x8804, // 34820\n invalidDecart: 0x8805, // 34821\n invalidBoolean: 0x8806, // 34822\n invalidTypeOperation: 0x8807, // 34823\n invalidCard: 0x8808, // 34824\n invalidDebool: 0x8809, // 34825\n globalFuncWithoutArgs: 0x880b, // 34827\n invalidReduce: 0x8810, // 34832\n invalidEnumeration: 0x8813, // 34835\n projectionSetArgumentNotSet: 0x8830, // 34864\n projectionSetArgumentNotTupleSet: 0x8831, // 34865\n projectionSetIndexOutOfRange: 0x8832, // 34866\n projectionTupleArgumentNotTuple: 0x8833, // 34867\n projectionTupleIndexOutOfRange: 0x8834, // 34868\n invalidCortegeDeclare: 0x8814, // 34836\n localOutOfScope: 0x8815, // 34837\n invalidElementPredicate: 0x8816, // 34838\n invalidEmptySetUsage: 0x8817, // 34839\n invalidArgsArity: 0x8818, // 34840\n invalidArgumentType: 0x8819, // 34841\n globalStructure: 0x881c, // 34844\n radicalUsage: 0x8821, // 34849\n invalidFilterArgumentType: 0x8822, // 34850\n invalidFilterArity: 0x8823, // 34851\n arithmeticNotSupported: 0x8824, // 34852\n typesNotCompatible: 0x8825, // 34853\n orderingNotSupported: 0x8826, // 34854\n expectedLogic: 0x8827, // 34855\n expectedSetexpr: 0x8828, // 34856\n invalidArgumentCortegeDeclare: 0x8829, // 34857\n invalidQuantifierDomain: 0x882a, // 34858\n invalidFilterParameterType: 0x882b, // 34859\n invalidFilterIndex: 0x882c, // 34860\n invalidFilterBooleanEchelon: 0x882d, // 34861\n localOutOfScopeParentheses: 0x882e, // 34862\n localUndeclaredInSubexpr: 0x882f, // 34863\n\n globalNoValue: 0x8840, // 34880\n invalidPropertyUsage: 0x8841, // 34881\n\n // Value evaluation (runtime)\n calcUnknownError: 0x8100, // 35328\n setOverflow: 0x8101, // 35329\n booleanBaseLimit: 0x8102, // 35330\n calcGlobalMissing: 0x8103, // 35331\n iterationsLimit: 0x8104, // 35332\n calcInvalidDebool: 0x8105, // 35333\n iterateInfinity: 0x8106, // 35334\n calculationNotSupported: 0x8107, // 35335\n calcInvalidData: 0x8108, // 35336\n\n cstEmptyDerived: 0x8861, // 34913\n definitionNotAllowed: 0x8862 // 34914\n} as const;\nexport type RSErrorCode = (typeof RSErrorCode)[keyof typeof RSErrorCode];\n\nconst ERROR_EVALUATION_MASK = 0x0100;\nconst ERROR_LEXER_MASK = 0x0200;\nconst ERROR_PARSER_MASK = 0x0400;\nconst ERROR_SEMANTIC_MASK = 0x0800;\n\n/** Infers error class from error type (code). */\nfunction inferErrorClass(error: RSErrorCode): RSErrorClass {\n if ((error & ERROR_EVALUATION_MASK) !== 0) {\n return RSErrorClass.EVALUATION;\n } else if ((error & ERROR_LEXER_MASK) !== 0) {\n return RSErrorClass.LEXER;\n } else if ((error & ERROR_PARSER_MASK) !== 0) {\n return RSErrorClass.PARSER;\n } else if ((error & ERROR_SEMANTIC_MASK) !== 0) {\n return RSErrorClass.SEMANTIC;\n } else {\n return RSErrorClass.UNKNOWN;\n }\n}\n\n/** Generate ErrorID label. */\nexport function getRSErrorPrefix(code: RSErrorCode): string {\n const id = code.toString(16).toUpperCase();\n // prettier-ignore\n switch (inferErrorClass(code)) {\n case RSErrorClass.LEXER: return 'L' + id;\n case RSErrorClass.PARSER: return 'P' + id;\n case RSErrorClass.SEMANTIC: return 'S' + id;\n case RSErrorClass.EVALUATION: return 'E' + id;\n case RSErrorClass.UNKNOWN: return 'U' + id;\n }\n}\n\n/** Checks if error is critical. */\nexport function isCritical(code: RSErrorCode): boolean {\n return code !== RSErrorCode.localDoubleDeclare && code !== RSErrorCode.localNotUsed;\n}\n"],"mappings":";;;AAGA,MAAa,eAAe;CAC1B,OAAO;CACP,QAAQ;CACR,UAAU;CACV,YAAY;CACZ,SAAS;AACX;;AAmBA,MAAa,cAAc;CACzB,eAAe;CACf,oBAAoB;CACpB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,mBAAmB;CACnB,wBAAwB;CACxB,yBAAyB;CACzB,wBAAwB;CACxB,uBAAuB;CACvB,0BAA0B;CAC1B,sBAAsB;CACtB,sBAAsB;CACtB,qBAAqB;CACrB,kBAAkB;CAClB,eAAe;CACf,cAAc;CAEd,oBAAoB;CACpB,cAAc;CAEd,iBAAiB;CACjB,gBAAgB;CAEhB,eAAe;CACf,gBAAgB;CAChB,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,aAAa;CACb,eAAe;CACf,uBAAuB;CACvB,eAAe;CACf,oBAAoB;CACpB,6BAA6B;CAC7B,kCAAkC;CAClC,8BAA8B;CAC9B,iCAAiC;CACjC,gCAAgC;CAChC,uBAAuB;CACvB,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,qBAAqB;CACrB,iBAAiB;CACjB,cAAc;CACd,2BAA2B;CAC3B,oBAAoB;CACpB,wBAAwB;CACxB,oBAAoB;CACpB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,+BAA+B;CAC/B,yBAAyB;CACzB,4BAA4B;CAC5B,oBAAoB;CACpB,6BAA6B;CAC7B,4BAA4B;CAC5B,0BAA0B;CAE1B,eAAe;CACf,sBAAsB;CAGtB,kBAAkB;CAClB,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB,iBAAiB;CACjB,yBAAyB;CACzB,iBAAiB;CAEjB,iBAAiB;CACjB,sBAAsB;AACxB;AAGA,MAAM,wBAAwB;AAC9B,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAC1B,MAAM,sBAAsB;;AAG5B,SAAS,gBAAgB,OAAkC;CACzD,KAAK,QAAQ,2BAA2B,GACtC,OAAO,aAAa;MACf,KAAK,QAAQ,sBAAsB,GACxC,OAAO,aAAa;MACf,KAAK,QAAQ,uBAAuB,GACzC,OAAO,aAAa;MACf,KAAK,QAAQ,yBAAyB,GAC3C,OAAO,aAAa;MAEpB,OAAO,aAAa;AAExB;;AAGA,SAAgB,iBAAiB,MAA2B;CAC1D,MAAM,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC,YAAY;CAEzC,QAAQ,gBAAgB,IAAI,GAA5B;EACE,KAAK,aAAa,OAAO,OAAO,MAAM;EACtC,KAAK,aAAa,QAAQ,OAAO,MAAM;EACvC,KAAK,aAAa,UAAU,OAAO,MAAM;EACzC,KAAK,aAAa,YAAY,OAAO,MAAM;EAC3C,KAAK,aAAa,SAAS,OAAO,MAAM;CAC1C;AACF;;AAGA,SAAgB,WAAW,MAA4B;CACrD,OAAO,SAAS,YAAY,sBAAsB,SAAS,YAAY;AACzE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../../calculator-
|
|
1
|
+
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../../calculator-REeX2ZS1.js";
|
|
2
2
|
export { CalculatorEvaluateOptions, CalculatorResult, RSCalculator };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as AstNode } from "../../ast-C8sIpKdL.js";
|
|
2
|
-
import { t as ErrorReporter } from "../../error-
|
|
2
|
+
import { t as ErrorReporter } from "../../error-toW0TUHF.js";
|
|
3
3
|
import { l as Value, u as ValueContext } from "../../value-BduA_ZGp.js";
|
|
4
4
|
|
|
5
5
|
//#region src/rslang/eval/evaluator.d.ts
|
package/dist/rslang/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { O as makeTypePath, b as Typification, d as EmptySetT, f as ExpressionType, g as TypeClass, m as LogicT, t as AnyTypificationT, v as TypeID, y as TypePath } from "../typification-Dk-fisgO.js";
|
|
2
|
-
import { i as RSErrorDescription, r as RSErrorCode } from "../error-
|
|
3
|
-
import { i as readTypeAnnotation, r as readErrorAnnotation } from "../ast-annotations-
|
|
2
|
+
import { i as RSErrorDescription, r as RSErrorCode } from "../error-toW0TUHF.js";
|
|
3
|
+
import { i as readTypeAnnotation, r as readErrorAnnotation } from "../ast-annotations-CtF7C9uK.js";
|
|
4
4
|
import { d as ValuePath, l as Value, p as makeValuePath } from "../value-BduA_ZGp.js";
|
|
5
|
-
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../calculator-
|
|
5
|
+
import { n as CalculatorResult, r as RSCalculator, t as CalculatorEvaluateOptions } from "../calculator-REeX2ZS1.js";
|
|
6
6
|
import { d as printValue } from "../value-api-B6T6f4Ia.js";
|
|
7
7
|
import { t as parser } from "../parser-Bwd8LxJ1.js";
|
|
8
8
|
import { t as TokenID } from "../token-DeXAmzwr.js";
|
|
9
9
|
import { t as ValueClass } from "../value-class-CNI-lqXJ.js";
|
|
10
|
-
import { a as RSLangAnalyzer, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "../analyzer-
|
|
10
|
+
import { a as RSLangAnalyzer, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "../analyzer-QxWs73gP.js";
|
|
11
11
|
import { n as ArgumentsType } from "../arguments-extractor-1acwjQNc.js";
|
|
12
12
|
import { n as applyAsciiTypeSubstitutions, r as parseTypeText } from "../typification-parser-BBVx1RxP.js";
|
|
13
13
|
import { n as TypificationNodeData, t as TypificationGraph } from "../typification-graph-6HcZ-rKH.js";
|
package/dist/rslang/labels.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { t as TokenID } from "../token-DeXAmzwr.js";
|
|
|
5
5
|
//#region src/rslang/labels.d.ts
|
|
6
6
|
/** Retrieves label for {@link TokenID}. */
|
|
7
7
|
declare function labelToken(id: TokenID): string;
|
|
8
|
-
/** Generates label for {@link AstNodeBase}. */
|
|
8
|
+
/** Generates label for {@link AstNodeBase}. Unnormalized grammar nodes fall through to `node.data.value` (Lezer name). */
|
|
9
9
|
declare function labelRSLangNode(node: AstNodeBase): string;
|
|
10
10
|
/** Converts expression type to string. */
|
|
11
11
|
declare function labelType(type: ExpressionType | null): string;
|
package/dist/rslang/labels.js
CHANGED
|
@@ -50,7 +50,7 @@ const labelTokenRecord = {
|
|
|
50
50
|
function labelToken(id) {
|
|
51
51
|
return labelTokenRecord[id] ?? "UNKNOWN TOKEN: " + String(id);
|
|
52
52
|
}
|
|
53
|
-
/** Generates label for {@link AstNodeBase}. */
|
|
53
|
+
/** Generates label for {@link AstNodeBase}. Unnormalized grammar nodes fall through to `node.data.value` (Lezer name). */
|
|
54
54
|
function labelRSLangNode(node) {
|
|
55
55
|
switch (node.typeID) {
|
|
56
56
|
case TokenID.ERROR: return "[ERROR]";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.js","names":[],"sources":["../../src/rslang/labels.ts"],"sourcesContent":["import { type AstNodeBase } from '../parsing';\n\nimport { TokenID } from './parser/token';\nimport { type ExpressionType, TypeID } from './semantic/typification';\n\nconst INTEGER_TYPE_NAME = 'Z';\nconst ANY_TYPE_NAME = 'R0';\nconst LOGIC_TYPE_NAME = 'Logic';\n\nconst labelTokenRecord: Partial<Record<TokenID, string>> = {\n [TokenID.DECART]: '×',\n [TokenID.PUNCTUATION_PL]: '( )',\n [TokenID.PUNCTUATION_SL]: '[ ]',\n [TokenID.QUANTOR_UNIVERSAL]: '∀',\n [TokenID.QUANTOR_EXISTS]: '∃',\n [TokenID.LOGIC_NOT]: '¬',\n [TokenID.LOGIC_AND]: '&',\n [TokenID.LOGIC_OR]: '∨',\n [TokenID.LOGIC_IMPLICATION]: '⇒',\n [TokenID.LOGIC_EQUIVALENT]: '⇔',\n [TokenID.LIT_EMPTYSET]: '∅',\n [TokenID.LIT_WHOLE_NUMBERS]: 'Z',\n [TokenID.MULTIPLY]: '*',\n [TokenID.EQUAL]: '=',\n [TokenID.NOTEQUAL]: '≠',\n [TokenID.GREATER_OR_EQ]: '≥',\n [TokenID.LESSER_OR_EQ]: '≤',\n [TokenID.SET_IN]: '∈',\n [TokenID.SET_NOT_IN]: '∉',\n [TokenID.SUBSET_OR_EQ]: '⊆',\n [TokenID.SUBSET]: '⊂',\n [TokenID.NOT_SUBSET]: '⊄',\n [TokenID.SET_INTERSECTION]: '∩',\n [TokenID.SET_UNION]: '∪',\n [TokenID.SET_MINUS]: '\\\\',\n [TokenID.SET_SYMMETRIC_MINUS]: '∆',\n [TokenID.BOOLEAN]: 'ℬ()',\n [TokenID.NT_DECLARATIVE_EXPR]: 'D{}',\n [TokenID.NT_IMPERATIVE_EXPR]: 'I{}',\n [TokenID.NT_RECURSIVE_FULL]: 'R{}',\n [TokenID.NT_RECURSIVE_SHORT]: 'R{}',\n [TokenID.BIGPR]: 'Pr1()',\n [TokenID.SMALLPR]: 'pr1()',\n [TokenID.FILTER]: 'Fi1[]()',\n [TokenID.REDUCE]: 'red()',\n [TokenID.CARD]: 'card()',\n [TokenID.BOOL]: 'bool()',\n [TokenID.DEBOOL]: 'debool()',\n [TokenID.ASSIGN]: ':=',\n [TokenID.ITERATE]: ':∈'\n};\n\n/** Retrieves label for {@link TokenID}. */\nexport function labelToken(id: TokenID): string {\n const text = labelTokenRecord[id];\n return text ?? 'UNKNOWN TOKEN: ' + String(id);\n}\n\n/** Generates label for {@link AstNodeBase}. */\nexport function labelRSLangNode(node: AstNodeBase): string {\n // prettier-ignore\n switch (node.typeID) {\n case TokenID.ERROR: return '[ERROR]';\n case TokenID.ID_LOCAL:\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n case TokenID.ID_RADICAL:\n return node.data.value as string;\n\n case TokenID.LIT_INTEGER: return String(node.data.value);\n\n case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();\n case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();\n case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();\n\n case TokenID.NT_DECLARATIVE_EXPR: return 'DECLARATIVE';\n case TokenID.NT_IMPERATIVE_EXPR: return 'IMPERATIVE';\n case TokenID.NT_RECURSIVE_FULL: return 'RECURSIVE';\n case TokenID.NT_RECURSIVE_SHORT: return 'RECURSIVE';\n\n case TokenID.BOOLEAN: return 'ℬ';\n case TokenID.REDUCE: return 'red';\n case TokenID.CARD: return 'card';\n case TokenID.BOOL: return 'bool';\n case TokenID.DEBOOL: return 'debool';\n\n case TokenID.PLUS: return '+';\n case TokenID.MINUS: return '-';\n case TokenID.MULTIPLY: return '*';\n case TokenID.GREATER: return '>';\n case TokenID.LESSER: return '<';\n\n case TokenID.NT_TUPLE: return 'TUPLE';\n case TokenID.NT_ENUMERATION: return 'ENUM';\n\n case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';\n case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';\n case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';\n case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';\n\n case TokenID.NT_ARG_DECL: return 'ARG';\n case TokenID.NT_FUNC_CALL: return 'CALL';\n case TokenID.NT_ARGUMENTS: return 'ARGS';\n\n case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';\n\n case TokenID.DECART:\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n case TokenID.LOGIC_NOT:\n case TokenID.LOGIC_AND:\n case TokenID.LOGIC_OR:\n case TokenID.LOGIC_IMPLICATION:\n case TokenID.LOGIC_EQUIVALENT:\n case TokenID.LIT_EMPTYSET:\n case TokenID.LIT_WHOLE_NUMBERS:\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_UNION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.ASSIGN:\n case TokenID.ITERATE:\n return labelToken(node.typeID);\n }\n if (node.data.value) {\n return node.data.value as string;\n }\n return 'UNKNOWN NODE: ' + String(node.typeID);\n}\n\n/** Converts expression type to string. */\nexport function labelType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n return INTEGER_TYPE_NAME;\n case TypeID.basic:\n return type.baseID;\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${labelType(type.base)}` : `ℬ(${labelType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => labelType(arg.type)).join(', ');\n return `[${argsText}] → ${labelType(type.result)}`;\n }\n}\n\n/** Converts expression type to normalized string. */\nexport function normalizeType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n case TypeID.basic:\n return 'X1';\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${normalizeType(factor)})` : normalizeType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${normalizeType(type.base)}` : `ℬ(${normalizeType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => normalizeType(arg.type)).join(', ');\n return `[${argsText}] → ${normalizeType(type.result)}`;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"labels.js","names":[],"sources":["../../src/rslang/labels.ts"],"sourcesContent":["import { type AstNodeBase } from '../parsing';\n\nimport { TokenID } from './parser/token';\nimport { type ExpressionType, TypeID } from './semantic/typification';\n\nconst INTEGER_TYPE_NAME = 'Z';\nconst ANY_TYPE_NAME = 'R0';\nconst LOGIC_TYPE_NAME = 'Logic';\n\nconst labelTokenRecord: Partial<Record<TokenID, string>> = {\n [TokenID.DECART]: '×',\n [TokenID.PUNCTUATION_PL]: '( )',\n [TokenID.PUNCTUATION_SL]: '[ ]',\n [TokenID.QUANTOR_UNIVERSAL]: '∀',\n [TokenID.QUANTOR_EXISTS]: '∃',\n [TokenID.LOGIC_NOT]: '¬',\n [TokenID.LOGIC_AND]: '&',\n [TokenID.LOGIC_OR]: '∨',\n [TokenID.LOGIC_IMPLICATION]: '⇒',\n [TokenID.LOGIC_EQUIVALENT]: '⇔',\n [TokenID.LIT_EMPTYSET]: '∅',\n [TokenID.LIT_WHOLE_NUMBERS]: 'Z',\n [TokenID.MULTIPLY]: '*',\n [TokenID.EQUAL]: '=',\n [TokenID.NOTEQUAL]: '≠',\n [TokenID.GREATER_OR_EQ]: '≥',\n [TokenID.LESSER_OR_EQ]: '≤',\n [TokenID.SET_IN]: '∈',\n [TokenID.SET_NOT_IN]: '∉',\n [TokenID.SUBSET_OR_EQ]: '⊆',\n [TokenID.SUBSET]: '⊂',\n [TokenID.NOT_SUBSET]: '⊄',\n [TokenID.SET_INTERSECTION]: '∩',\n [TokenID.SET_UNION]: '∪',\n [TokenID.SET_MINUS]: '\\\\',\n [TokenID.SET_SYMMETRIC_MINUS]: '∆',\n [TokenID.BOOLEAN]: 'ℬ()',\n [TokenID.NT_DECLARATIVE_EXPR]: 'D{}',\n [TokenID.NT_IMPERATIVE_EXPR]: 'I{}',\n [TokenID.NT_RECURSIVE_FULL]: 'R{}',\n [TokenID.NT_RECURSIVE_SHORT]: 'R{}',\n [TokenID.BIGPR]: 'Pr1()',\n [TokenID.SMALLPR]: 'pr1()',\n [TokenID.FILTER]: 'Fi1[]()',\n [TokenID.REDUCE]: 'red()',\n [TokenID.CARD]: 'card()',\n [TokenID.BOOL]: 'bool()',\n [TokenID.DEBOOL]: 'debool()',\n [TokenID.ASSIGN]: ':=',\n [TokenID.ITERATE]: ':∈'\n};\n\n/** Retrieves label for {@link TokenID}. */\nexport function labelToken(id: TokenID): string {\n const text = labelTokenRecord[id];\n return text ?? 'UNKNOWN TOKEN: ' + String(id);\n}\n\n/** Generates label for {@link AstNodeBase}. Unnormalized grammar nodes fall through to `node.data.value` (Lezer name). */\nexport function labelRSLangNode(node: AstNodeBase): string {\n // prettier-ignore\n switch (node.typeID) {\n case TokenID.ERROR: return '[ERROR]';\n case TokenID.ID_LOCAL:\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n case TokenID.ID_RADICAL:\n return node.data.value as string;\n\n case TokenID.LIT_INTEGER: return String(node.data.value);\n\n case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();\n case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();\n case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();\n\n case TokenID.NT_DECLARATIVE_EXPR: return 'DECLARATIVE';\n case TokenID.NT_IMPERATIVE_EXPR: return 'IMPERATIVE';\n case TokenID.NT_RECURSIVE_FULL: return 'RECURSIVE';\n case TokenID.NT_RECURSIVE_SHORT: return 'RECURSIVE';\n\n case TokenID.BOOLEAN: return 'ℬ';\n case TokenID.REDUCE: return 'red';\n case TokenID.CARD: return 'card';\n case TokenID.BOOL: return 'bool';\n case TokenID.DEBOOL: return 'debool';\n\n case TokenID.PLUS: return '+';\n case TokenID.MINUS: return '-';\n case TokenID.MULTIPLY: return '*';\n case TokenID.GREATER: return '>';\n case TokenID.LESSER: return '<';\n\n case TokenID.NT_TUPLE: return 'TUPLE';\n case TokenID.NT_ENUMERATION: return 'ENUM';\n\n case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';\n case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';\n case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';\n case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';\n\n case TokenID.NT_ARG_DECL: return 'ARG';\n case TokenID.NT_FUNC_CALL: return 'CALL';\n case TokenID.NT_ARGUMENTS: return 'ARGS';\n\n case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';\n\n case TokenID.DECART:\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n case TokenID.LOGIC_NOT:\n case TokenID.LOGIC_AND:\n case TokenID.LOGIC_OR:\n case TokenID.LOGIC_IMPLICATION:\n case TokenID.LOGIC_EQUIVALENT:\n case TokenID.LIT_EMPTYSET:\n case TokenID.LIT_WHOLE_NUMBERS:\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_UNION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.ASSIGN:\n case TokenID.ITERATE:\n return labelToken(node.typeID);\n }\n if (node.data.value) {\n return node.data.value as string;\n }\n return 'UNKNOWN NODE: ' + String(node.typeID);\n}\n\n/** Converts expression type to string. */\nexport function labelType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n return INTEGER_TYPE_NAME;\n case TypeID.basic:\n return type.baseID;\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${labelType(type.base)}` : `ℬ(${labelType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => labelType(arg.type)).join(', ');\n return `[${argsText}] → ${labelType(type.result)}`;\n }\n}\n\n/** Converts expression type to normalized string. */\nexport function normalizeType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n case TypeID.basic:\n return 'X1';\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${normalizeType(factor)})` : normalizeType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${normalizeType(type.base)}` : `ℬ(${normalizeType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => normalizeType(arg.type)).join(', ');\n return `[${argsText}] → ${normalizeType(type.result)}`;\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,11 @@ import { TokenID } from "./token.js";
|
|
|
4
4
|
import "./parser.terms.js";
|
|
5
5
|
//#region src/rslang/parser/normalize.ts
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Rewrites the Lezer parse tree into semantic {@link TokenID} nodes.
|
|
8
|
+
*
|
|
9
|
+
* Skips any node with `hasError` (subtree contains a parse `ERROR`). Those branches keep grammar
|
|
10
|
+
* `typeID`s from `parser.terms` — the tree becomes **hybrid** until the expression is valid.
|
|
11
|
+
* See `parser/README.md` (hybrid AST) and `syntax-errors/README.md`.
|
|
8
12
|
*/
|
|
9
13
|
/** Normalizes AST to a simple form. */
|
|
10
14
|
function normalizeAST(ast, input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","names":[],"sources":["../../../src/rslang/parser/normalize.ts"],"sourcesContent":["/**\n * Module: Transforming AST to a simple form.\n */\n\nimport { type AstNode, visitAstDFS } from '../../parsing';\n\nimport {\n Arguments,\n BigPr,\n Bool,\n Boolean,\n Card,\n Debool,\n Declaration,\n Declarative,\n EmptySet,\n Enumeration,\n Expr_enum_min2,\n Expression,\n Filter,\n Filter_expression,\n Function,\n Function_decl,\n Global,\n Imp_blocks,\n Imperative,\n Integer,\n IntegerSet,\n Local,\n Logic,\n Logic_binary,\n Logic_predicates,\n Logic_quantor,\n Logic_unary,\n Predicate,\n PrefixD,\n Radical,\n Recursion,\n Red,\n Setexpr,\n Setexpr_binary,\n SmallPr,\n Tuple,\n Variable,\n Variable_pack\n} from './parser.terms';\nimport { TokenID } from './token';\n\n/** Normalizes AST to a simple form. */\nexport function normalizeAST(ast: AstNode, input: string) {\n visitAstDFS(ast, node => normalizeNode(node, input));\n}\n\n// ====== Internals =========\nconst idRecord: Record<number, TokenID> = {\n [Global]: TokenID.ID_GLOBAL,\n [Local]: TokenID.ID_LOCAL,\n [Radical]: TokenID.ID_RADICAL,\n [Function]: TokenID.ID_FUNCTION,\n [Predicate]: TokenID.ID_PREDICATE,\n [Integer]: TokenID.LIT_INTEGER,\n [EmptySet]: TokenID.LIT_EMPTYSET,\n [IntegerSet]: TokenID.LIT_WHOLE_NUMBERS,\n\n [Boolean]: TokenID.BOOLEAN,\n\n [BigPr]: TokenID.BIGPR,\n [SmallPr]: TokenID.SMALLPR,\n [Filter]: TokenID.FILTER,\n\n [Bool]: TokenID.BOOL,\n [Debool]: TokenID.DEBOOL,\n [Red]: TokenID.REDUCE,\n [Card]: TokenID.CARD,\n\n [Enumeration]: TokenID.NT_ENUMERATION,\n [Tuple]: TokenID.NT_TUPLE,\n [Arguments]: TokenID.NT_ARGUMENTS,\n [Declaration]: TokenID.NT_ARG_DECL,\n [Function_decl]: TokenID.NT_FUNC_DEFINITION,\n [Variable_pack]: TokenID.NT_ENUM_DECL,\n [Declarative]: TokenID.NT_DECLARATIVE_EXPR,\n [Imperative]: TokenID.NT_IMPERATIVE_EXPR\n};\n\nfunction normalizeNode(node: AstNode, input: string) {\n if (node.hasError) {\n return;\n }\n switch (node.typeID) {\n case 0:\n return;\n\n case Expression:\n promoteSingleChild(node);\n return;\n\n case EmptySet:\n case IntegerSet:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n return;\n\n case Integer:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'number';\n node.data.value = Number(input.slice(node.from, node.to));\n return;\n\n case Function:\n case Predicate:\n case Global:\n case Local:\n case Radical:\n case Integer:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'string';\n node.data.value = input.slice(node.from, node.to);\n return;\n\n case Boolean:\n node.typeID = idRecord[node.typeID];\n if (node.children.length === 4) {\n node.children = [node.children[2]];\n } else {\n node.children = [node.children[1]];\n }\n clearData(node);\n return;\n\n case Filter:\n case BigPr:\n case SmallPr:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'string[]';\n node.data.value = parseIndex(input.slice(node.from + 2, node.to));\n return;\n\n case Red:\n case Debool:\n case Bool:\n case Card:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n return;\n\n case Function_decl:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n node.children = [node.children[1], node.children[3]];\n return;\n case Declaration:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n node.children = [node.children[0], node.children[2]];\n return;\n\n case Arguments:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children.length === 3) {\n processLeftEnum(node);\n }\n return;\n\n case Expr_enum_min2:\n processLeftEnum(node);\n return;\n\n case Setexpr:\n if (node.children.length === 1) {\n promoteSingleChild(node);\n } else if (node.children.length === 4) {\n processTextFunction(node);\n }\n return;\n\n case Tuple:\n case Enumeration:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children[1].typeID === Expr_enum_min2) {\n for (const child of node.children[1].children) {\n child.parent = node;\n }\n node.children = node.children[1].children;\n } else {\n node.children = [node.children[1]];\n }\n return;\n\n case Logic_binary:\n case Logic_predicates:\n case Setexpr_binary:\n if (node.children[0].data.value === '(') {\n processParenthesis(node);\n } else {\n clearData(node);\n node.typeID = symbolToToken(node.children[1].data.value as string);\n if (node.typeID === TokenID.DECART) {\n processDecartChildren(node);\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n }\n return;\n\n case Filter_expression:\n processFilter(node);\n return;\n\n case Logic:\n if (node.children[0].data.value === '(') {\n processParenthesis(node);\n } else {\n promoteSingleChild(node);\n }\n return;\n\n case Logic_unary:\n if (node.children[0].data.value === '¬') {\n clearData(node);\n node.typeID = TokenID.LOGIC_NOT;\n node.children = [node.children[1]];\n } else if (node.children[0].typeID === TokenID.ID_PREDICATE) {\n processTextFunction(node);\n } else {\n promoteSingleChild(node);\n }\n return;\n\n case Logic_quantor:\n clearData(node);\n node.typeID = symbolToToken(node.children[0].data.value as string);\n node.children = [node.children[1], node.children[3], node.children[4]];\n return;\n\n case Variable:\n convertTupleDeclaration(node.children[0]);\n promoteSingleChild(node);\n return;\n\n case Variable_pack:\n if (node.children.length === 1) {\n promoteSingleChild(node);\n } else {\n node.typeID = idRecord[node.typeID];\n processLeftEnum(node);\n }\n return;\n\n case Declarative:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children[0].typeID === PrefixD) {\n node.children = [node.children[2], node.children[4], node.children[6]];\n } else {\n node.children = [node.children[1], node.children[3], node.children[5]];\n }\n return;\n\n case Imp_blocks:\n if (node.children.length === 1) {\n if (node.parent?.typeID === Imp_blocks) {\n promoteSingleChild(node);\n }\n } else {\n processLeftEnum(node);\n }\n return;\n\n case Imperative:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n for (const child of node.children[4].children) {\n child.parent = node;\n }\n node.children = [node.children[2], ...node.children[4].children];\n return;\n\n case Recursion:\n if (node.children.length > 9) {\n node.typeID = TokenID.NT_RECURSIVE_FULL;\n node.children = [node.children[2], node.children[4], node.children[6], node.children[8]];\n } else {\n node.typeID = TokenID.NT_RECURSIVE_SHORT;\n node.children = [node.children[2], node.children[4], node.children[6]];\n }\n return;\n }\n}\n\nfunction convertTupleDeclaration(node: AstNode) {\n if (node.typeID !== TokenID.NT_TUPLE) {\n return;\n }\n node.typeID = TokenID.NT_TUPLE_DECL;\n for (const child of node.children) {\n convertTupleDeclaration(child);\n }\n}\n\nfunction clearData(node: AstNode) {\n node.data.value = null;\n node.data.dataType = 'null';\n}\n\nfunction promoteSingleChild(node: AstNode, index: number = 0) {\n for (const child of node.children[index].children) {\n child.parent = node;\n }\n node.typeID = node.children[index].typeID;\n node.data = node.children[index].data;\n node.parenthesis = node.children[index].parenthesis;\n node.children = node.children[index].children;\n}\n\nfunction parseIndex(text: string): string[] {\n return text.split(',');\n}\n\nfunction symbolToToken(symbol: string): TokenID {\n switch (symbol) {\n case '+':\n return TokenID.PLUS;\n case '-':\n return TokenID.MINUS;\n case '*':\n return TokenID.MULTIPLY;\n\n case '∪':\n return TokenID.SET_UNION;\n case '\\\\':\n return TokenID.SET_MINUS;\n case '∆':\n return TokenID.SET_SYMMETRIC_MINUS;\n case '∩':\n return TokenID.SET_INTERSECTION;\n case '×':\n return TokenID.DECART;\n\n case '∈':\n return TokenID.SET_IN;\n case '∉':\n return TokenID.SET_NOT_IN;\n case '⊆':\n return TokenID.SUBSET_OR_EQ;\n case '⊄':\n return TokenID.NOT_SUBSET;\n case '⊂':\n return TokenID.SUBSET;\n\n case '>':\n return TokenID.GREATER;\n case '≥':\n return TokenID.GREATER_OR_EQ;\n case '<':\n return TokenID.LESSER;\n case '≤':\n return TokenID.LESSER_OR_EQ;\n\n case '≠':\n return TokenID.NOTEQUAL;\n case '=':\n return TokenID.EQUAL;\n\n case ':∈':\n return TokenID.ITERATE;\n case ':=':\n return TokenID.ASSIGN;\n\n case '¬':\n return TokenID.LOGIC_NOT;\n\n case '⇔':\n return TokenID.LOGIC_EQUIVALENT;\n case '⇒':\n return TokenID.LOGIC_IMPLICATION;\n case '∨':\n return TokenID.LOGIC_OR;\n case '&':\n return TokenID.LOGIC_AND;\n\n case '∀':\n return TokenID.QUANTOR_UNIVERSAL;\n case '∃':\n return TokenID.QUANTOR_EXISTS;\n }\n return TokenID.ERROR;\n}\n\nfunction processParenthesis(node: AstNode) {\n promoteSingleChild(node, 1);\n node.parenthesis = true;\n}\n\nfunction processLeftEnum(node: AstNode) {\n if (node.children[0].typeID === node.typeID) {\n for (const child of node.children[0].children) {\n child.parent = node;\n }\n node.children = [...node.children[0].children, node.children[2]];\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n}\n\nfunction processDecartChildren(node: AstNode) {\n const newChildren: AstNode[] = [];\n if (node.children[0].typeID === TokenID.DECART && !node.children[0].parenthesis) {\n for (const child of node.children[0].children) {\n child.parent = node;\n newChildren.push(child);\n }\n } else {\n newChildren.push(node.children[0]);\n }\n\n if (node.children[2].typeID === TokenID.DECART && !node.children[2].parenthesis) {\n for (const child of node.children[2].children) {\n child.parent = node;\n newChildren.push(child);\n }\n } else {\n newChildren.push(node.children[2]);\n }\n node.children = newChildren;\n}\n\nfunction processTextFunction(node: AstNode) {\n if (node.children[0].typeID === TokenID.ID_FUNCTION || node.children[0].typeID === TokenID.ID_PREDICATE) {\n node.typeID = TokenID.NT_FUNC_CALL;\n clearData(node);\n if (node.children[2].typeID === Expr_enum_min2) {\n for (const child of node.children[2].children) {\n child.parent = node;\n }\n node.children = [node.children[0], ...node.children[2].children];\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n } else {\n node.typeID = node.children[0].typeID;\n node.data = node.children[0].data;\n node.children = [node.children[2]];\n }\n}\n\nfunction processFilter(node: AstNode) {\n const children: AstNode[] = [];\n if (node.children[2].typeID === Expr_enum_min2) {\n for (const child of node.children[2].children) {\n child.parent = node;\n children.push(child);\n }\n } else {\n children.push(node.children[2]);\n }\n children.push(node.children[5]);\n promoteSingleChild(node);\n node.children = children;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize.js","names":[],"sources":["../../../src/rslang/parser/normalize.ts"],"sourcesContent":["/**\n * Rewrites the Lezer parse tree into semantic {@link TokenID} nodes.\n *\n * Skips any node with `hasError` (subtree contains a parse `ERROR`). Those branches keep grammar\n * `typeID`s from `parser.terms` — the tree becomes **hybrid** until the expression is valid.\n * See `parser/README.md` (hybrid AST) and `syntax-errors/README.md`.\n */\n\nimport { type AstNode, visitAstDFS } from '../../parsing';\n\nimport {\n Arguments,\n BigPr,\n Bool,\n Boolean,\n Card,\n Debool,\n Declaration,\n Declarative,\n EmptySet,\n Enumeration,\n Expr_enum_min2,\n Expression,\n Filter,\n Filter_expression,\n Function,\n Function_decl,\n Global,\n Imp_blocks,\n Imperative,\n Integer,\n IntegerSet,\n Local,\n Logic,\n Logic_binary,\n Logic_predicates,\n Logic_quantor,\n Logic_unary,\n Predicate,\n PrefixD,\n Radical,\n Recursion,\n Red,\n Setexpr,\n Setexpr_binary,\n SmallPr,\n Tuple,\n Variable,\n Variable_pack\n} from './parser.terms';\nimport { TokenID } from './token';\n\n/** Normalizes AST to a simple form. */\nexport function normalizeAST(ast: AstNode, input: string) {\n visitAstDFS(ast, node => normalizeNode(node, input));\n}\n\n// ====== Internals =========\nconst idRecord: Record<number, TokenID> = {\n [Global]: TokenID.ID_GLOBAL,\n [Local]: TokenID.ID_LOCAL,\n [Radical]: TokenID.ID_RADICAL,\n [Function]: TokenID.ID_FUNCTION,\n [Predicate]: TokenID.ID_PREDICATE,\n [Integer]: TokenID.LIT_INTEGER,\n [EmptySet]: TokenID.LIT_EMPTYSET,\n [IntegerSet]: TokenID.LIT_WHOLE_NUMBERS,\n\n [Boolean]: TokenID.BOOLEAN,\n\n [BigPr]: TokenID.BIGPR,\n [SmallPr]: TokenID.SMALLPR,\n [Filter]: TokenID.FILTER,\n\n [Bool]: TokenID.BOOL,\n [Debool]: TokenID.DEBOOL,\n [Red]: TokenID.REDUCE,\n [Card]: TokenID.CARD,\n\n [Enumeration]: TokenID.NT_ENUMERATION,\n [Tuple]: TokenID.NT_TUPLE,\n [Arguments]: TokenID.NT_ARGUMENTS,\n [Declaration]: TokenID.NT_ARG_DECL,\n [Function_decl]: TokenID.NT_FUNC_DEFINITION,\n [Variable_pack]: TokenID.NT_ENUM_DECL,\n [Declarative]: TokenID.NT_DECLARATIVE_EXPR,\n [Imperative]: TokenID.NT_IMPERATIVE_EXPR\n};\n\nfunction normalizeNode(node: AstNode, input: string) {\n if (node.hasError) {\n return;\n }\n switch (node.typeID) {\n case 0:\n return;\n\n case Expression:\n promoteSingleChild(node);\n return;\n\n case EmptySet:\n case IntegerSet:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n return;\n\n case Integer:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'number';\n node.data.value = Number(input.slice(node.from, node.to));\n return;\n\n case Function:\n case Predicate:\n case Global:\n case Local:\n case Radical:\n case Integer:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'string';\n node.data.value = input.slice(node.from, node.to);\n return;\n\n case Boolean:\n node.typeID = idRecord[node.typeID];\n if (node.children.length === 4) {\n node.children = [node.children[2]];\n } else {\n node.children = [node.children[1]];\n }\n clearData(node);\n return;\n\n case Filter:\n case BigPr:\n case SmallPr:\n node.typeID = idRecord[node.typeID];\n node.data.dataType = 'string[]';\n node.data.value = parseIndex(input.slice(node.from + 2, node.to));\n return;\n\n case Red:\n case Debool:\n case Bool:\n case Card:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n return;\n\n case Function_decl:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n node.children = [node.children[1], node.children[3]];\n return;\n case Declaration:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n node.children = [node.children[0], node.children[2]];\n return;\n\n case Arguments:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children.length === 3) {\n processLeftEnum(node);\n }\n return;\n\n case Expr_enum_min2:\n processLeftEnum(node);\n return;\n\n case Setexpr:\n if (node.children.length === 1) {\n promoteSingleChild(node);\n } else if (node.children.length === 4) {\n processTextFunction(node);\n }\n return;\n\n case Tuple:\n case Enumeration:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children[1].typeID === Expr_enum_min2) {\n for (const child of node.children[1].children) {\n child.parent = node;\n }\n node.children = node.children[1].children;\n } else {\n node.children = [node.children[1]];\n }\n return;\n\n case Logic_binary:\n case Logic_predicates:\n case Setexpr_binary:\n if (node.children[0].data.value === '(') {\n processParenthesis(node);\n } else {\n clearData(node);\n node.typeID = symbolToToken(node.children[1].data.value as string);\n if (node.typeID === TokenID.DECART) {\n processDecartChildren(node);\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n }\n return;\n\n case Filter_expression:\n processFilter(node);\n return;\n\n case Logic:\n if (node.children[0].data.value === '(') {\n processParenthesis(node);\n } else {\n promoteSingleChild(node);\n }\n return;\n\n case Logic_unary:\n if (node.children[0].data.value === '¬') {\n clearData(node);\n node.typeID = TokenID.LOGIC_NOT;\n node.children = [node.children[1]];\n } else if (node.children[0].typeID === TokenID.ID_PREDICATE) {\n processTextFunction(node);\n } else {\n promoteSingleChild(node);\n }\n return;\n\n case Logic_quantor:\n clearData(node);\n node.typeID = symbolToToken(node.children[0].data.value as string);\n node.children = [node.children[1], node.children[3], node.children[4]];\n return;\n\n case Variable:\n convertTupleDeclaration(node.children[0]);\n promoteSingleChild(node);\n return;\n\n case Variable_pack:\n if (node.children.length === 1) {\n promoteSingleChild(node);\n } else {\n node.typeID = idRecord[node.typeID];\n processLeftEnum(node);\n }\n return;\n\n case Declarative:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n if (node.children[0].typeID === PrefixD) {\n node.children = [node.children[2], node.children[4], node.children[6]];\n } else {\n node.children = [node.children[1], node.children[3], node.children[5]];\n }\n return;\n\n case Imp_blocks:\n if (node.children.length === 1) {\n if (node.parent?.typeID === Imp_blocks) {\n promoteSingleChild(node);\n }\n } else {\n processLeftEnum(node);\n }\n return;\n\n case Imperative:\n node.typeID = idRecord[node.typeID];\n clearData(node);\n for (const child of node.children[4].children) {\n child.parent = node;\n }\n node.children = [node.children[2], ...node.children[4].children];\n return;\n\n case Recursion:\n if (node.children.length > 9) {\n node.typeID = TokenID.NT_RECURSIVE_FULL;\n node.children = [node.children[2], node.children[4], node.children[6], node.children[8]];\n } else {\n node.typeID = TokenID.NT_RECURSIVE_SHORT;\n node.children = [node.children[2], node.children[4], node.children[6]];\n }\n return;\n }\n}\n\nfunction convertTupleDeclaration(node: AstNode) {\n if (node.typeID !== TokenID.NT_TUPLE) {\n return;\n }\n node.typeID = TokenID.NT_TUPLE_DECL;\n for (const child of node.children) {\n convertTupleDeclaration(child);\n }\n}\n\nfunction clearData(node: AstNode) {\n node.data.value = null;\n node.data.dataType = 'null';\n}\n\nfunction promoteSingleChild(node: AstNode, index: number = 0) {\n for (const child of node.children[index].children) {\n child.parent = node;\n }\n node.typeID = node.children[index].typeID;\n node.data = node.children[index].data;\n node.parenthesis = node.children[index].parenthesis;\n node.children = node.children[index].children;\n}\n\nfunction parseIndex(text: string): string[] {\n return text.split(',');\n}\n\nfunction symbolToToken(symbol: string): TokenID {\n switch (symbol) {\n case '+':\n return TokenID.PLUS;\n case '-':\n return TokenID.MINUS;\n case '*':\n return TokenID.MULTIPLY;\n\n case '∪':\n return TokenID.SET_UNION;\n case '\\\\':\n return TokenID.SET_MINUS;\n case '∆':\n return TokenID.SET_SYMMETRIC_MINUS;\n case '∩':\n return TokenID.SET_INTERSECTION;\n case '×':\n return TokenID.DECART;\n\n case '∈':\n return TokenID.SET_IN;\n case '∉':\n return TokenID.SET_NOT_IN;\n case '⊆':\n return TokenID.SUBSET_OR_EQ;\n case '⊄':\n return TokenID.NOT_SUBSET;\n case '⊂':\n return TokenID.SUBSET;\n\n case '>':\n return TokenID.GREATER;\n case '≥':\n return TokenID.GREATER_OR_EQ;\n case '<':\n return TokenID.LESSER;\n case '≤':\n return TokenID.LESSER_OR_EQ;\n\n case '≠':\n return TokenID.NOTEQUAL;\n case '=':\n return TokenID.EQUAL;\n\n case ':∈':\n return TokenID.ITERATE;\n case ':=':\n return TokenID.ASSIGN;\n\n case '¬':\n return TokenID.LOGIC_NOT;\n\n case '⇔':\n return TokenID.LOGIC_EQUIVALENT;\n case '⇒':\n return TokenID.LOGIC_IMPLICATION;\n case '∨':\n return TokenID.LOGIC_OR;\n case '&':\n return TokenID.LOGIC_AND;\n\n case '∀':\n return TokenID.QUANTOR_UNIVERSAL;\n case '∃':\n return TokenID.QUANTOR_EXISTS;\n }\n return TokenID.ERROR;\n}\n\nfunction processParenthesis(node: AstNode) {\n promoteSingleChild(node, 1);\n node.parenthesis = true;\n}\n\nfunction processLeftEnum(node: AstNode) {\n if (node.children[0].typeID === node.typeID) {\n for (const child of node.children[0].children) {\n child.parent = node;\n }\n node.children = [...node.children[0].children, node.children[2]];\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n}\n\nfunction processDecartChildren(node: AstNode) {\n const newChildren: AstNode[] = [];\n if (node.children[0].typeID === TokenID.DECART && !node.children[0].parenthesis) {\n for (const child of node.children[0].children) {\n child.parent = node;\n newChildren.push(child);\n }\n } else {\n newChildren.push(node.children[0]);\n }\n\n if (node.children[2].typeID === TokenID.DECART && !node.children[2].parenthesis) {\n for (const child of node.children[2].children) {\n child.parent = node;\n newChildren.push(child);\n }\n } else {\n newChildren.push(node.children[2]);\n }\n node.children = newChildren;\n}\n\nfunction processTextFunction(node: AstNode) {\n if (node.children[0].typeID === TokenID.ID_FUNCTION || node.children[0].typeID === TokenID.ID_PREDICATE) {\n node.typeID = TokenID.NT_FUNC_CALL;\n clearData(node);\n if (node.children[2].typeID === Expr_enum_min2) {\n for (const child of node.children[2].children) {\n child.parent = node;\n }\n node.children = [node.children[0], ...node.children[2].children];\n } else {\n node.children = [node.children[0], node.children[2]];\n }\n } else {\n node.typeID = node.children[0].typeID;\n node.data = node.children[0].data;\n node.children = [node.children[2]];\n }\n}\n\nfunction processFilter(node: AstNode) {\n const children: AstNode[] = [];\n if (node.children[2].typeID === Expr_enum_min2) {\n for (const child of node.children[2].children) {\n child.parent = node;\n children.push(child);\n }\n } else {\n children.push(node.children[2]);\n }\n children.push(node.children[5]);\n promoteSingleChild(node);\n node.children = children;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as AstNode } from "../../../ast-C8sIpKdL.js";
|
|
2
|
+
import { g as TypeClass } from "../../../typification-Dk-fisgO.js";
|
|
3
|
+
import { t as ErrorReporter } from "../../../error-toW0TUHF.js";
|
|
4
|
+
|
|
5
|
+
//#region src/rslang/parser/syntax-errors/index.d.ts
|
|
6
|
+
/** When set, refines incomplete formal headers (`[α∈…]`, quantifiers). */
|
|
7
|
+
interface SyntaxErrorOptions {
|
|
8
|
+
expected?: TypeClass;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Walks a parsed expression AST and reports syntax errors.
|
|
12
|
+
*
|
|
13
|
+
* @param ast - Root AST from `buildTree(parser.parse(expression))`
|
|
14
|
+
* @param expression - Original source text (positions must match the AST)
|
|
15
|
+
* @param reporter - Called once per deduplicated error
|
|
16
|
+
* @param annotateErrors - When true, also calls `annotateError` on the triggering node
|
|
17
|
+
* @param options - Optional typification hint for incomplete formal expressions
|
|
18
|
+
*/
|
|
19
|
+
declare function extractSyntaxErrors(ast: AstNode, expression: string, reporter: ErrorReporter, annotateErrors?: boolean, options?: SyntaxErrorOptions): void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { SyntaxErrorOptions, extractSyntaxErrors };
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as RSLangAnalyzer, i as AnalysisOptions, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "../../analyzer-
|
|
1
|
+
import { a as RSLangAnalyzer, i as AnalysisOptions, n as AnalysisFast, r as AnalysisFull, t as AnalysisBase } from "../../analyzer-QxWs73gP.js";
|
|
2
2
|
export { AnalysisBase, AnalysisFast, AnalysisFull, AnalysisOptions, RSLangAnalyzer };
|
|
@@ -7,7 +7,7 @@ import { TypeID, basic, bool, constant, debool } from "./typification.js";
|
|
|
7
7
|
import { labelType } from "../labels.js";
|
|
8
8
|
import { parser } from "../parser/parser.js";
|
|
9
9
|
import { normalizeAST } from "../parser/normalize.js";
|
|
10
|
-
import { extractSyntaxErrors } from "
|
|
10
|
+
import { t as extractSyntaxErrors } from "../../syntax-errors-B6c2vsan.js";
|
|
11
11
|
import { getTypeClass } from "./typification-api.js";
|
|
12
12
|
import { TypeAuditor } from "./type-auditor.js";
|
|
13
13
|
import { ValueClass } from "./value-class.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AstNode } from "../../ast-C8sIpKdL.js";
|
|
2
2
|
import { _ as TypeContext, f as ExpressionType } from "../../typification-Dk-fisgO.js";
|
|
3
|
-
import { t as ErrorReporter } from "../../error-
|
|
3
|
+
import { t as ErrorReporter } from "../../error-toW0TUHF.js";
|
|
4
4
|
|
|
5
5
|
//#region src/rslang/semantic/type-auditor.d.ts
|
|
6
6
|
/** Type auditor for AST type checking. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as AstNode } from "../../ast-C8sIpKdL.js";
|
|
2
|
-
import { t as ErrorReporter } from "../../error-
|
|
2
|
+
import { t as ErrorReporter } from "../../error-toW0TUHF.js";
|
|
3
3
|
import { n as ValueClassContext, t as ValueClass } from "../../value-class-CNI-lqXJ.js";
|
|
4
4
|
|
|
5
5
|
//#region src/rslang/semantic/value-auditor.d.ts
|