@rsconcept/domain 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +3 -3
  2. package/dist/analyzer-DlSq3Y3r.d.ts +39 -0
  3. package/dist/arguments-extractor-1acwjQNc.d.ts +38 -0
  4. package/dist/ast-C8sIpKdL.d.ts +51 -0
  5. package/dist/ast-annotations-BiMjkKvz.d.ts +16 -0
  6. package/dist/branded-ZlzIcxzu.d.ts +9 -0
  7. package/dist/calculator-C9W2jkSx.d.ts +39 -0
  8. package/dist/cctext/index.d.ts +2 -1
  9. package/dist/cctext/index.js +2 -42
  10. package/dist/cctext/language-api.d.ts +10 -12
  11. package/dist/cctext/language-api.js +157 -227
  12. package/dist/cctext/language-api.js.map +1 -1
  13. package/dist/cctext/language.d.ts +24 -22
  14. package/dist/cctext/language.js +43 -39
  15. package/dist/cctext/language.js.map +1 -1
  16. package/dist/error-E1LVq_3w.d.ts +87 -0
  17. package/dist/graph/graph.d.ts +2 -62
  18. package/dist/graph/graph.js +339 -382
  19. package/dist/graph/graph.js.map +1 -1
  20. package/dist/graph/index.d.ts +2 -1
  21. package/dist/graph/index.js +2 -384
  22. package/dist/graph-DR8rL2o3.d.ts +64 -0
  23. package/dist/hash-Y8I4c6Al.d.ts +8 -0
  24. package/dist/index-BKZ67WMa.d.ts +1 -0
  25. package/dist/index-BVVgDSdq.d.ts +1 -0
  26. package/dist/index-DmtQKWjk.d.ts +1 -0
  27. package/dist/index-_6s0AX1B.d.ts +1 -0
  28. package/dist/index.d.ts +27 -28
  29. package/dist/index.js +23 -5851
  30. package/dist/lezer-tree-iS7LpLBJ.d.ts +14 -0
  31. package/dist/library/folder-tree.d.ts +22 -20
  32. package/dist/library/folder-tree.js +108 -130
  33. package/dist/library/folder-tree.js.map +1 -1
  34. package/dist/library/index.d.ts +8 -17
  35. package/dist/library/index.js +7 -2800
  36. package/dist/library/library-api.d.ts +3 -1
  37. package/dist/library/library-api.js +9 -8
  38. package/dist/library/library-api.js.map +1 -1
  39. package/dist/library/library.d.ts +2 -56
  40. package/dist/library/library.js +23 -19
  41. package/dist/library/library.js.map +1 -1
  42. package/dist/library/oss-api.d.ts +26 -37
  43. package/dist/library/oss-api.js +257 -1096
  44. package/dist/library/oss-api.js.map +1 -1
  45. package/dist/library/oss-layout-api.d.ts +28 -28
  46. package/dist/library/oss-layout-api.js +239 -316
  47. package/dist/library/oss-layout-api.js.map +1 -1
  48. package/dist/library/oss-layout.d.ts +2 -25
  49. package/dist/library/oss-layout.js +1 -1
  50. package/dist/library/oss.d.ts +87 -89
  51. package/dist/library/oss.js +27 -26
  52. package/dist/library/oss.js.map +1 -1
  53. package/dist/library/rsengine.d.ts +100 -106
  54. package/dist/library/rsengine.js +439 -2599
  55. package/dist/library/rsengine.js.map +1 -1
  56. package/dist/library/rsform-api.d.ts +11 -16
  57. package/dist/library/rsform-api.js +313 -825
  58. package/dist/library/rsform-api.js.map +1 -1
  59. package/dist/library/rsform.d.ts +159 -167
  60. package/dist/library/rsform.js +29 -28
  61. package/dist/library/rsform.js.map +1 -1
  62. package/dist/library/rsmodel-api.d.ts +8 -15
  63. package/dist/library/rsmodel-api.js +172 -813
  64. package/dist/library/rsmodel-api.js.map +1 -1
  65. package/dist/library/rsmodel.d.ts +27 -33
  66. package/dist/library/rsmodel.js +16 -23
  67. package/dist/library/rsmodel.js.map +1 -1
  68. package/dist/library/structure-planner.d.ts +20 -26
  69. package/dist/library/structure-planner.js +106 -474
  70. package/dist/library/structure-planner.js.map +1 -1
  71. package/dist/library-CYun28Xz.d.ts +58 -0
  72. package/dist/oss-layout-3glgAqfn.d.ts +27 -0
  73. package/dist/parser-Bwd8LxJ1.d.ts +7 -0
  74. package/dist/parsing/ast.d.ts +2 -49
  75. package/dist/parsing/ast.js +68 -76
  76. package/dist/parsing/ast.js.map +1 -1
  77. package/dist/parsing/index.d.ts +3 -3
  78. package/dist/parsing/index.js +3 -141
  79. package/dist/parsing/lezer-tree.d.ts +2 -13
  80. package/dist/parsing/lezer-tree.js +50 -43
  81. package/dist/parsing/lezer-tree.js.map +1 -1
  82. package/dist/rslang/api.d.ts +9 -14
  83. package/dist/rslang/api.js +114 -827
  84. package/dist/rslang/api.js.map +1 -1
  85. package/dist/rslang/ast-annotations.d.ts +2 -18
  86. package/dist/rslang/ast-annotations.js +34 -45
  87. package/dist/rslang/ast-annotations.js.map +1 -1
  88. package/dist/rslang/error.d.ts +2 -85
  89. package/dist/rslang/error.js +88 -150
  90. package/dist/rslang/error.js.map +1 -1
  91. package/dist/rslang/eval/calculator.d.ts +2 -43
  92. package/dist/rslang/eval/calculator.js +81 -1636
  93. package/dist/rslang/eval/calculator.js.map +1 -1
  94. package/dist/rslang/eval/evaluation-cache.d.ts +22 -26
  95. package/dist/rslang/eval/evaluation-cache.js +168 -287
  96. package/dist/rslang/eval/evaluation-cache.js.map +1 -1
  97. package/dist/rslang/eval/evaluator.d.ts +59 -63
  98. package/dist/rslang/eval/evaluator.js +602 -1509
  99. package/dist/rslang/eval/evaluator.js.map +1 -1
  100. package/dist/rslang/eval/value-api.d.ts +2 -48
  101. package/dist/rslang/eval/value-api.js +2 -490
  102. package/dist/rslang/eval/value.d.ts +2 -36
  103. package/dist/rslang/eval/value.js +2 -118
  104. package/dist/rslang/index.d.ts +14 -17
  105. package/dist/rslang/index.js +12 -4314
  106. package/dist/rslang/labels.d.ts +6 -6
  107. package/dist/rslang/labels.js +139 -305
  108. package/dist/rslang/labels.js.map +1 -1
  109. package/dist/rslang/parser/expression-generator.d.ts +5 -5
  110. package/dist/rslang/parser/expression-generator.js +248 -446
  111. package/dist/rslang/parser/expression-generator.js.map +1 -1
  112. package/dist/rslang/parser/normalize.d.ts +4 -8
  113. package/dist/rslang/parser/normalize.js +286 -481
  114. package/dist/rslang/parser/normalize.js.map +1 -1
  115. package/dist/rslang/parser/parser.d.ts +2 -5
  116. package/dist/rslang/parser/parser.js +30 -21
  117. package/dist/rslang/parser/parser.js.map +1 -1
  118. package/dist/rslang/parser/parser.terms.d.ts +43 -41
  119. package/dist/rslang/parser/parser.terms.js +44 -83
  120. package/dist/rslang/parser/parser.terms.js.map +1 -1
  121. package/dist/rslang/parser/syntax-errors.d.ts +5 -8
  122. package/dist/rslang/parser/syntax-errors.js +113 -382
  123. package/dist/rslang/parser/syntax-errors.js.map +1 -1
  124. package/dist/rslang/parser/token.d.ts +2 -79
  125. package/dist/rslang/parser/token.js +81 -93
  126. package/dist/rslang/parser/token.js.map +1 -1
  127. package/dist/rslang/semantic/analyzer.d.ts +2 -39
  128. package/dist/rslang/semantic/analyzer.js +186 -2600
  129. package/dist/rslang/semantic/analyzer.js.map +1 -1
  130. package/dist/rslang/semantic/arguments-extractor.d.ts +2 -42
  131. package/dist/rslang/semantic/arguments-extractor.js +202 -361
  132. package/dist/rslang/semantic/arguments-extractor.js.map +1 -1
  133. package/dist/rslang/semantic/type-auditor.d.ts +64 -68
  134. package/dist/rslang/semantic/type-auditor.js +594 -1564
  135. package/dist/rslang/semantic/type-auditor.js.map +1 -1
  136. package/dist/rslang/semantic/typification-api.d.ts +4 -7
  137. package/dist/rslang/semantic/typification-api.js +162 -303
  138. package/dist/rslang/semantic/typification-api.js.map +1 -1
  139. package/dist/rslang/semantic/typification-parser.d.ts +2 -12
  140. package/dist/rslang/semantic/typification-parser.js +165 -219
  141. package/dist/rslang/semantic/typification-parser.js.map +1 -1
  142. package/dist/rslang/semantic/typification.d.ts +2 -119
  143. package/dist/rslang/semantic/typification.js +66 -52
  144. package/dist/rslang/semantic/typification.js.map +1 -1
  145. package/dist/rslang/semantic/value-auditor.d.ts +32 -38
  146. package/dist/rslang/semantic/value-auditor.js +206 -518
  147. package/dist/rslang/semantic/value-auditor.js.map +1 -1
  148. package/dist/rslang/semantic/value-class.d.ts +2 -10
  149. package/dist/rslang/semantic/value-class.js +8 -7
  150. package/dist/rslang/semantic/value-class.js.map +1 -1
  151. package/dist/rslang/typification-graph.d.ts +2 -33
  152. package/dist/rslang/typification-graph.js +94 -306
  153. package/dist/rslang/typification-graph.js.map +1 -1
  154. package/dist/shared/branded.d.ts +2 -7
  155. package/dist/shared/branded.js +1 -1
  156. package/dist/shared/hash.d.ts +2 -6
  157. package/dist/shared/hash.js +13 -13
  158. package/dist/shared/hash.js.map +1 -1
  159. package/dist/shared/index.d.ts +3 -2
  160. package/dist/shared/index.js +2 -18
  161. package/dist/token-DeXAmzwr.d.ts +81 -0
  162. package/dist/typification-Dk-fisgO.d.ts +120 -0
  163. package/dist/typification-graph-6HcZ-rKH.d.ts +30 -0
  164. package/dist/typification-parser-BBVx1RxP.d.ts +13 -0
  165. package/dist/value-B8UtCqaK.js +366 -0
  166. package/dist/value-B8UtCqaK.js.map +1 -0
  167. package/dist/value-CTjX6825.d.ts +33 -0
  168. package/dist/value-api-Bw-SgaYY.d.ts +49 -0
  169. package/dist/value-class-CNI-lqXJ.d.ts +12 -0
  170. package/package.json +8 -8
  171. package/src/library/rsform-api.test.ts +24 -0
  172. package/src/library/rsform-api.ts +12 -4
  173. package/dist/cctext/index.js.map +0 -1
  174. package/dist/graph/index.js.map +0 -1
  175. package/dist/index.js.map +0 -1
  176. package/dist/library/index.js.map +0 -1
  177. package/dist/library/oss-layout.js.map +0 -1
  178. package/dist/parsing/index.js.map +0 -1
  179. package/dist/rslang/eval/value-api.js.map +0 -1
  180. package/dist/rslang/eval/value.js.map +0 -1
  181. package/dist/rslang/index.js.map +0 -1
  182. package/dist/shared/branded.js.map +0 -1
  183. package/dist/shared/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/parsing/ast.ts","../../../src/rslang/ast-annotations.ts","../../../src/rslang/error.ts","../../../src/rslang/parser/token.ts","../../../src/rslang/semantic/value-class.ts","../../../src/rslang/semantic/value-auditor.ts"],"sourcesContent":["import { type TreeCursor } from './lezer-tree';\n\nexport const TOKEN_ERROR = 0;\n\n/** Represents AST node data. */\ninterface AstNodeData extends Record<string, unknown> {\n dataType: string;\n value: unknown;\n}\n\n/** Represents AST structured node base. */\nexport interface AstNodeBase {\n typeID: number;\n data: AstNodeData;\n annotation?: Record<string, unknown>;\n}\n\n/** Represents AST structured node. */\nexport interface AstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n from: number;\n to: number;\n hasError: boolean;\n parenthesis?: boolean;\n parent: AstNode | null;\n children: AstNode[];\n}\n\n/** Represents AST node. */\nexport interface FlatAstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n parent: number | null;\n from: number;\n to: number;\n}\n\n/** Represents Syntax tree flat representation. */\nexport type FlatAST = FlatAstNode[];\n\n/** Builds AST tree from a given tree cursor, generating unique uids for each node. */\nexport function buildTree(cursor: TreeCursor): AstNode {\n let nextUid = 1;\n function genUid() {\n return nextUid++;\n }\n return buildTreeInternal(cursor, null, genUid);\n}\n\n/** Flattens AST tree to a array form. */\nexport function flattenAst(node: AstNode, parent: number | null = null, out: FlatAST = []): FlatAST {\n out.push({\n uid: node.uid,\n parent: parent,\n typeID: node.typeID,\n from: node.from,\n to: node.to,\n data: node.data,\n annotation: node.annotation\n });\n for (const child of node.children) {\n flattenAst(child, node.uid, out);\n }\n return out;\n}\n\n/** Visits AST tree in depth-first order. */\nexport function visitAstDFS(node: AstNode, callback: (node: AstNode) => void) {\n for (const child of node.children) {\n visitAstDFS(child, callback);\n }\n callback(node);\n}\n\n/** Finds and returns the AstNode with the given ui. */\nexport function findByUid(root: AstNode, uid: number): AstNode | null {\n let found: AstNode | null = null;\n visitAstDFS(root, node => {\n if (node.uid === uid && !found) {\n found = node;\n }\n });\n return found;\n}\n\n/** Prints AST tree. */\nexport function printAst(node: AstNode, printNode: (node: AstNode) => string): string {\n let children: string = '';\n for (const child of node.children) {\n children += `${printAst(child, printNode)}`;\n }\n return `[${printNode(node)}${children}]`;\n}\n\n/** Extracts node text. */\nexport function getNodeText(node: AstNode): string {\n if (node.data.dataType === 'string' && typeof node.data.value === 'string') {\n return node.data.value;\n }\n return `NO DATA NODE: ${node.typeID}`;\n}\n\n/** Extracts node indices. */\nexport function getNodeIndices(node: AstNode): number[] {\n if (node.data.dataType === 'string[]' && Array.isArray(node.data.value)) {\n return (node.data.value as string[]).map(s => parseInt(s, 10)).filter(n => !isNaN(n));\n }\n return [];\n}\n\n// ======== Internals ========\nfunction buildTreeInternal(cursor: TreeCursor, parent: AstNode | null = null, genUid: () => number): AstNode {\n const node = cursor.node;\n\n const result: AstNode = {\n uid: genUid(),\n typeID: node.type.isError ? 0 : node.type.id,\n from: node.from,\n to: node.to,\n hasError: node.type.isError,\n data: node.type.isError ? { dataType: 'null', value: null } : { dataType: 'string', value: node.type.name },\n parent,\n children: []\n };\n\n if (cursor.firstChild()) {\n do {\n const child = buildTreeInternal(cursor, result, genUid);\n if (child.hasError) {\n result.hasError = true;\n }\n result.children.push(child);\n } while (cursor.nextSibling());\n cursor.parent();\n }\n return result;\n}\n","/** Module: AST annotations. */\n\nimport { type AstNode } from '../parsing';\n\nimport { type ExpressionType } from './semantic/typification';\nimport { type RSErrorCode, type RSErrorInfo } from './error';\n\nconst AST_ERRORS_KEY = 'rsErrors' as const;\nconst AST_TYPE_KEY = 'rsType' as const;\n\n/** Appends {@link ExpressionType} onto the node's `annotation.rsType`. */\nexport function annotateType(node: AstNode, type: ExpressionType): void {\n node.annotation = {\n ...(typeof node.annotation === 'object' && node.annotation !== null ? node.annotation : {}),\n [AST_TYPE_KEY]: type\n };\n}\n\n/** Reads {@link ExpressionType} from node's `annotation`. */\nexport function readTypeAnnotation(node: AstNode): ExpressionType | null {\n if (node.annotation && AST_TYPE_KEY in node.annotation) {\n return node.annotation[AST_TYPE_KEY] as ExpressionType;\n }\n return null;\n}\n\n/** Appends {@link RSErrorInfo} onto the node's `annotation.rsErrors` if not already set. */\nexport function annotateError(node: AstNode, code: RSErrorCode, params?: readonly string[]): void {\n if (\n typeof node.annotation === 'object' &&\n node.annotation !== null &&\n AST_ERRORS_KEY in node.annotation &&\n isAstNodeErrorRef(node.annotation[AST_ERRORS_KEY])\n ) {\n return;\n }\n const entry: RSErrorInfo = params !== undefined && params.length > 0 ? { code, params: [...params] } : { code };\n node.annotation = {\n ...(typeof node.annotation === 'object' && node.annotation !== null ? node.annotation : {}),\n [AST_ERRORS_KEY]: entry\n };\n}\n\n/** Reads validated {@link RSErrorInfo} entry from node's `annotation`. */\nexport function readErrorAnnotation(node: AstNode): RSErrorInfo | null {\n const raw = node.annotation?.[AST_ERRORS_KEY];\n if (isAstNodeErrorRef(raw)) {\n return raw;\n }\n return null;\n}\n\n// ====== Internal ======\nfunction isAstNodeErrorRef(x: unknown): x is RSErrorInfo {\n if (typeof x !== 'object' || x === null || !('code' in x)) {\n return false;\n }\n const code = x.code;\n if (typeof code !== 'number') {\n return false;\n }\n if (!('params' in x)) {\n return true;\n }\n const p = (x as { params: unknown }).params;\n if (p === undefined) {\n return true;\n }\n return Array.isArray(p) && p.every(item => typeof item === 'string');\n}\n","/** 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 missingParenthesis: 0x8406, // 33798\n missingCurlyBrace: 0x8407, // 33799\n missingSquareBracket: 0x8408, // 33800\n bracketMismatch: 0x8409, // 33801\n doubleParenthesis: 0x840a, // 33802\n missingOpenBracket: 0x840b, // 33803\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 invalidProjectionTuple: 0x8811, // 34833\n invalidProjectionSet: 0x8812, // 34834\n invalidEnumeration: 0x8813, // 34835\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\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\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","import { TOKEN_ERROR } from '../../parsing';\n\n/** Represents RSLang token types. */\nexport const TokenID = {\n // Global, local IDs and literals\n ERROR: TOKEN_ERROR,\n\n ID_LOCAL: 258,\n ID_GLOBAL: 259,\n ID_FUNCTION: 260,\n ID_PREDICATE: 261,\n ID_RADICAL: 262,\n LIT_INTEGER: 263,\n LIT_WHOLE_NUMBERS: 264,\n LIT_EMPTYSET: 265,\n\n // Arithmetic\n PLUS: 266,\n MINUS: 267,\n MULTIPLY: 268,\n\n // Integer predicate symbols\n GREATER: 269,\n LESSER: 270,\n GREATER_OR_EQ: 271,\n LESSER_OR_EQ: 272,\n\n // Equality comparison\n EQUAL: 273,\n NOTEQUAL: 274,\n\n // Logic predicate symbols\n QUANTOR_UNIVERSAL: 275,\n QUANTOR_EXISTS: 276,\n LOGIC_NOT: 277,\n LOGIC_EQUIVALENT: 278,\n LOGIC_IMPLICATION: 279,\n LOGIC_OR: 280,\n LOGIC_AND: 281,\n\n // Set theory predicate symbols\n SET_IN: 282,\n SET_NOT_IN: 283,\n SUBSET: 284,\n SUBSET_OR_EQ: 285,\n NOT_SUBSET: 286,\n\n // Set theory operators\n DECART: 287,\n SET_UNION: 288,\n SET_INTERSECTION: 289,\n SET_MINUS: 290,\n SET_SYMMETRIC_MINUS: 291,\n BOOLEAN: 292,\n\n // Structure operations\n BIGPR: 293,\n SMALLPR: 294,\n FILTER: 295,\n CARD: 296,\n BOOL: 297,\n DEBOOL: 298,\n REDUCE: 299,\n\n // Term constructions prefixes\n DECLARATIVE: 300,\n RECURSIVE: 301,\n IMPERATIVE: 302,\n\n ITERATE: 303,\n ASSIGN: 304,\n\n // Punctuation\n PUNCTUATION_DEFINE: 305,\n PUNCTUATION_STRUCT: 306,\n PUNCTUATION_PL: 307,\n PUNCTUATION_PR: 308,\n PUNCTUATION_CL: 309,\n PUNCTUATION_CR: 310,\n PUNCTUATION_SL: 311,\n PUNCTUATION_SR: 312,\n PUNCTUATION_BAR: 313,\n PUNCTUATION_COMMA: 314,\n PUNCTUATION_SEMICOLON: 315,\n\n // ======= Non-terminal tokens =========\n NT_ENUM_DECL: 316,\n NT_TUPLE: 317,\n NT_ENUMERATION: 318,\n NT_TUPLE_DECL: 319,\n NT_ARG_DECL: 320,\n\n NT_FUNC_DEFINITION: 321,\n NT_ARGUMENTS: 322,\n NT_FUNC_CALL: 323,\n\n NT_DECLARATIVE_EXPR: 324,\n NT_IMPERATIVE_EXPR: 325,\n NT_RECURSIVE_FULL: 326,\n NT_RECURSIVE_SHORT: 327,\n\n // ======= Helper tokens ========\n INTERRUPT: 328,\n END: 329\n} as const;\nexport type TokenID = (typeof TokenID)[keyof typeof TokenID];\n","/* Module: Calculation for RSLang. */\n\n/** Represents computability class. */\nexport const ValueClass = {\n VALUE: 'value',\n PROPERTY: 'property'\n} as const;\nexport type ValueClass = (typeof ValueClass)[keyof typeof ValueClass];\n\n/** ValueClass context. */\nexport type ValueClassContext = Map<string, ValueClass>;\n","/**\n * Module: Value auditor for AST value class checking.\n *\n * Determines whether an expression yields a concrete value (computable)\n * or a property (e.g., depends on a quantified variable).\n */\n\nimport { type AstNode, getNodeText } from '../../parsing';\nimport { annotateError } from '../ast-annotations';\nimport { type ErrorReporter, RSErrorCode } from '../error';\nimport { TokenID } from '../parser/token';\n\nimport { ValueClass, type ValueClassContext } from './value-class';\n\n/** Value auditor for AST value class checking. */\nexport class ValueAuditor {\n private context: ValueClassContext;\n private annotateErrors: boolean;\n private reporter?: ErrorReporter;\n\n constructor(context: ValueClassContext) {\n this.context = context;\n this.annotateErrors = false;\n }\n\n /**\n * Runs value audit on the AST. Returns the value class on success, null on failure.\n */\n run(ast: AstNode, reporter?: ErrorReporter, annotateErrors: boolean = false): ValueClass | null {\n if (ast.hasError) {\n return null;\n }\n this.reporter = reporter;\n this.annotateErrors = annotateErrors;\n return this.dispatchVisit(ast);\n }\n\n private dispatchVisit(node: AstNode): ValueClass | null {\n switch (node.typeID) {\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n return this.visitGlobal(node);\n\n case TokenID.ID_LOCAL:\n case TokenID.ID_RADICAL:\n case TokenID.LIT_INTEGER:\n case TokenID.LIT_EMPTYSET:\n return ValueClass.VALUE;\n\n case TokenID.LIT_WHOLE_NUMBERS:\n return ValueClass.PROPERTY;\n\n case TokenID.NT_TUPLE_DECL:\n case TokenID.NT_ENUM_DECL:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.NT_ARGUMENTS:\n case TokenID.NT_ARG_DECL:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.PLUS:\n case TokenID.MINUS:\n case TokenID.MULTIPLY:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n return this.visitQuantifier(node);\n\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 return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n return this.assertAllValues(node);\n\n case TokenID.GREATER:\n case TokenID.LESSER:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.NOT_SUBSET:\n return this.visitSetexprPredicate(node);\n\n case TokenID.DECART:\n return this.visitDecart(node);\n case TokenID.BOOLEAN:\n return this.visitBoolean(node);\n\n case TokenID.NT_TUPLE:\n case TokenID.NT_ENUMERATION:\n return this.assertAllValues(node);\n\n case TokenID.FILTER:\n return this.visitFilter(node);\n\n case TokenID.CARD:\n case TokenID.BOOL:\n case TokenID.DEBOOL:\n case TokenID.BIGPR:\n case TokenID.SMALLPR:\n case TokenID.REDUCE:\n return this.assertChildIsValue(node, 0);\n\n case TokenID.SET_UNION:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n return this.visitSetexprBinary(node);\n\n case TokenID.NT_FUNC_DEFINITION:\n return this.visitFunctionDefinition(node);\n case TokenID.NT_FUNC_CALL:\n return this.visitFunctionCall(node);\n\n case TokenID.NT_DECLARATIVE_EXPR:\n return this.visitDeclarative(node);\n case TokenID.NT_IMPERATIVE_EXPR:\n return this.visitImperative(node);\n\n case TokenID.NT_RECURSIVE_FULL:\n case TokenID.NT_RECURSIVE_SHORT:\n return this.assertAllValues(node);\n\n case TokenID.ITERATE:\n case TokenID.ASSIGN:\n return this.visitIterateOrAssign(node);\n }\n return null;\n }\n\n private onError(code: RSErrorCode, node: AstNode, params?: string[]): null {\n this.reporter?.({ code, from: node.from, to: node.to, params });\n if (this.annotateErrors) {\n annotateError(node, code, params);\n }\n return null;\n }\n\n private visitChild(node: AstNode, index: number): ValueClass | null {\n return this.dispatchVisit(node.children[index]);\n }\n\n private visitAllAndReturn(node: AstNode, value: ValueClass): ValueClass | null {\n for (const child of node.children) {\n if (this.dispatchVisit(child) === null) {\n return null;\n }\n }\n return value;\n }\n\n private assertChildIsValue(node: AstNode, index: number): ValueClass | null {\n const result = this.visitChild(node, index);\n if (result === null) {\n return null;\n }\n if (result !== ValueClass.VALUE) {\n const child = node.children[index];\n return this.onError(RSErrorCode.invalidPropertyUsage, child ?? node);\n }\n return ValueClass.VALUE;\n }\n\n private assertAllValues(node: AstNode): ValueClass | null {\n for (let i = 0; i < node.children.length; i++) {\n if (this.assertChildIsValue(node, i) === null) {\n return null;\n }\n }\n return ValueClass.VALUE;\n }\n\n private visitFunctionDefinition(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return this.visitChild(node, 1);\n }\n\n private visitFunctionCall(node: AstNode): ValueClass | null {\n const result = this.visitChild(node, 0);\n if (result === null) {\n return null;\n }\n for (let child = 1; child < node.children.length; child++) {\n if (this.assertChildIsValue(node, child) === null) {\n return null;\n }\n }\n return result;\n }\n\n private visitGlobal(node: AstNode): ValueClass | null {\n const alias = getNodeText(node);\n const result = this.context.get(alias);\n if (!result) {\n return this.onError(RSErrorCode.globalNoValue, node, [alias]);\n }\n return result;\n }\n\n private visitQuantifier(node: AstNode): ValueClass | null {\n if (this.assertChildIsValue(node, 1) === null) {\n return null;\n }\n if (this.visitChild(node, 2) === null) {\n return null;\n }\n return ValueClass.VALUE;\n }\n\n private visitSetexprPredicate(node: AstNode): ValueClass | null {\n const tokenId = node.typeID as TokenID;\n switch (tokenId) {\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n if (this.assertChildIsValue(node, 0) === null) {\n return null;\n }\n if (this.visitChild(node, 1) === null) {\n return null;\n }\n return ValueClass.VALUE;\n\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n return this.assertAllValues(node);\n }\n return null;\n }\n\n private visitDeclarative(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 2) === null) {\n return null;\n }\n return this.visitChild(node, 1);\n }\n\n private visitImperative(node: AstNode): ValueClass | null {\n for (let child = 1; child < node.children.length; child++) {\n if (this.visitChild(node, child) === null) {\n return null;\n }\n }\n return this.assertChildIsValue(node, 0);\n }\n\n private visitIterateOrAssign(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return this.assertChildIsValue(node, 1);\n }\n\n private visitDecart(node: AstNode): ValueClass | null {\n let result: ValueClass = ValueClass.VALUE;\n for (let child = 0; child < node.children.length; child++) {\n const childClass = this.visitChild(node, child);\n if (childClass === null) {\n return null;\n }\n if (childClass === ValueClass.PROPERTY) {\n result = ValueClass.PROPERTY;\n }\n }\n return result;\n }\n\n private visitBoolean(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return ValueClass.PROPERTY;\n }\n\n private visitFilter(node: AstNode): ValueClass | null {\n let last: ValueClass | null = null;\n for (const child of node.children) {\n last = this.dispatchVisit(child);\n if (last === null) {\n return null;\n }\n }\n return last;\n }\n\n private visitSetexprBinary(node: AstNode): ValueClass | null {\n const first = this.visitChild(node, 0);\n if (first === null) {\n return null;\n }\n const second = this.visitChild(node, 1);\n if (second === null) {\n return null;\n }\n const isValue = combineOperationValues(\n node.typeID as TokenID,\n first === ValueClass.VALUE,\n second === ValueClass.VALUE\n );\n return isValue ? ValueClass.VALUE : ValueClass.PROPERTY;\n }\n}\n\n// ====== Internals ======\n\n/** Combines value flags for set operations. */\nfunction combineOperationValues(op: TokenID, v1: boolean, v2: boolean): boolean {\n switch (op) {\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.SET_UNION:\n return v1 && v2;\n case TokenID.SET_INTERSECTION:\n return v1 || v2;\n case TokenID.SET_MINUS:\n return v1;\n default:\n return v1 && v2;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"value-auditor.js","names":[],"sources":["../../../src/rslang/semantic/value-auditor.ts"],"sourcesContent":["/**\n * Module: Value auditor for AST value class checking.\n *\n * Determines whether an expression yields a concrete value (computable)\n * or a property (e.g., depends on a quantified variable).\n */\n\nimport { type AstNode, getNodeText } from '../../parsing';\nimport { annotateError } from '../ast-annotations';\nimport { type ErrorReporter, RSErrorCode } from '../error';\nimport { TokenID } from '../parser/token';\n\nimport { ValueClass, type ValueClassContext } from './value-class';\n\n/** Value auditor for AST value class checking. */\nexport class ValueAuditor {\n private context: ValueClassContext;\n private annotateErrors: boolean;\n private reporter?: ErrorReporter;\n\n constructor(context: ValueClassContext) {\n this.context = context;\n this.annotateErrors = false;\n }\n\n /**\n * Runs value audit on the AST. Returns the value class on success, null on failure.\n */\n run(ast: AstNode, reporter?: ErrorReporter, annotateErrors: boolean = false): ValueClass | null {\n if (ast.hasError) {\n return null;\n }\n this.reporter = reporter;\n this.annotateErrors = annotateErrors;\n return this.dispatchVisit(ast);\n }\n\n private dispatchVisit(node: AstNode): ValueClass | null {\n switch (node.typeID) {\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n return this.visitGlobal(node);\n\n case TokenID.ID_LOCAL:\n case TokenID.ID_RADICAL:\n case TokenID.LIT_INTEGER:\n case TokenID.LIT_EMPTYSET:\n return ValueClass.VALUE;\n\n case TokenID.LIT_WHOLE_NUMBERS:\n return ValueClass.PROPERTY;\n\n case TokenID.NT_TUPLE_DECL:\n case TokenID.NT_ENUM_DECL:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.NT_ARGUMENTS:\n case TokenID.NT_ARG_DECL:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.PLUS:\n case TokenID.MINUS:\n case TokenID.MULTIPLY:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n return this.visitQuantifier(node);\n\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 return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n return this.assertAllValues(node);\n\n case TokenID.GREATER:\n case TokenID.LESSER:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n return this.visitAllAndReturn(node, ValueClass.VALUE);\n\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.NOT_SUBSET:\n return this.visitSetexprPredicate(node);\n\n case TokenID.DECART:\n return this.visitDecart(node);\n case TokenID.BOOLEAN:\n return this.visitBoolean(node);\n\n case TokenID.NT_TUPLE:\n case TokenID.NT_ENUMERATION:\n return this.assertAllValues(node);\n\n case TokenID.FILTER:\n return this.visitFilter(node);\n\n case TokenID.CARD:\n case TokenID.BOOL:\n case TokenID.DEBOOL:\n case TokenID.BIGPR:\n case TokenID.SMALLPR:\n case TokenID.REDUCE:\n return this.assertChildIsValue(node, 0);\n\n case TokenID.SET_UNION:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n return this.visitSetexprBinary(node);\n\n case TokenID.NT_FUNC_DEFINITION:\n return this.visitFunctionDefinition(node);\n case TokenID.NT_FUNC_CALL:\n return this.visitFunctionCall(node);\n\n case TokenID.NT_DECLARATIVE_EXPR:\n return this.visitDeclarative(node);\n case TokenID.NT_IMPERATIVE_EXPR:\n return this.visitImperative(node);\n\n case TokenID.NT_RECURSIVE_FULL:\n case TokenID.NT_RECURSIVE_SHORT:\n return this.assertAllValues(node);\n\n case TokenID.ITERATE:\n case TokenID.ASSIGN:\n return this.visitIterateOrAssign(node);\n }\n return null;\n }\n\n private onError(code: RSErrorCode, node: AstNode, params?: string[]): null {\n this.reporter?.({ code, from: node.from, to: node.to, params });\n if (this.annotateErrors) {\n annotateError(node, code, params);\n }\n return null;\n }\n\n private visitChild(node: AstNode, index: number): ValueClass | null {\n return this.dispatchVisit(node.children[index]);\n }\n\n private visitAllAndReturn(node: AstNode, value: ValueClass): ValueClass | null {\n for (const child of node.children) {\n if (this.dispatchVisit(child) === null) {\n return null;\n }\n }\n return value;\n }\n\n private assertChildIsValue(node: AstNode, index: number): ValueClass | null {\n const result = this.visitChild(node, index);\n if (result === null) {\n return null;\n }\n if (result !== ValueClass.VALUE) {\n const child = node.children[index];\n return this.onError(RSErrorCode.invalidPropertyUsage, child ?? node);\n }\n return ValueClass.VALUE;\n }\n\n private assertAllValues(node: AstNode): ValueClass | null {\n for (let i = 0; i < node.children.length; i++) {\n if (this.assertChildIsValue(node, i) === null) {\n return null;\n }\n }\n return ValueClass.VALUE;\n }\n\n private visitFunctionDefinition(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return this.visitChild(node, 1);\n }\n\n private visitFunctionCall(node: AstNode): ValueClass | null {\n const result = this.visitChild(node, 0);\n if (result === null) {\n return null;\n }\n for (let child = 1; child < node.children.length; child++) {\n if (this.assertChildIsValue(node, child) === null) {\n return null;\n }\n }\n return result;\n }\n\n private visitGlobal(node: AstNode): ValueClass | null {\n const alias = getNodeText(node);\n const result = this.context.get(alias);\n if (!result) {\n return this.onError(RSErrorCode.globalNoValue, node, [alias]);\n }\n return result;\n }\n\n private visitQuantifier(node: AstNode): ValueClass | null {\n if (this.assertChildIsValue(node, 1) === null) {\n return null;\n }\n if (this.visitChild(node, 2) === null) {\n return null;\n }\n return ValueClass.VALUE;\n }\n\n private visitSetexprPredicate(node: AstNode): ValueClass | null {\n const tokenId = node.typeID as TokenID;\n switch (tokenId) {\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n if (this.assertChildIsValue(node, 0) === null) {\n return null;\n }\n if (this.visitChild(node, 1) === null) {\n return null;\n }\n return ValueClass.VALUE;\n\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n return this.assertAllValues(node);\n }\n return null;\n }\n\n private visitDeclarative(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 2) === null) {\n return null;\n }\n return this.visitChild(node, 1);\n }\n\n private visitImperative(node: AstNode): ValueClass | null {\n for (let child = 1; child < node.children.length; child++) {\n if (this.visitChild(node, child) === null) {\n return null;\n }\n }\n return this.assertChildIsValue(node, 0);\n }\n\n private visitIterateOrAssign(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return this.assertChildIsValue(node, 1);\n }\n\n private visitDecart(node: AstNode): ValueClass | null {\n let result: ValueClass = ValueClass.VALUE;\n for (let child = 0; child < node.children.length; child++) {\n const childClass = this.visitChild(node, child);\n if (childClass === null) {\n return null;\n }\n if (childClass === ValueClass.PROPERTY) {\n result = ValueClass.PROPERTY;\n }\n }\n return result;\n }\n\n private visitBoolean(node: AstNode): ValueClass | null {\n if (this.visitChild(node, 0) === null) {\n return null;\n }\n return ValueClass.PROPERTY;\n }\n\n private visitFilter(node: AstNode): ValueClass | null {\n let last: ValueClass | null = null;\n for (const child of node.children) {\n last = this.dispatchVisit(child);\n if (last === null) {\n return null;\n }\n }\n return last;\n }\n\n private visitSetexprBinary(node: AstNode): ValueClass | null {\n const first = this.visitChild(node, 0);\n if (first === null) {\n return null;\n }\n const second = this.visitChild(node, 1);\n if (second === null) {\n return null;\n }\n const isValue = combineOperationValues(\n node.typeID as TokenID,\n first === ValueClass.VALUE,\n second === ValueClass.VALUE\n );\n return isValue ? ValueClass.VALUE : ValueClass.PROPERTY;\n }\n}\n\n// ====== Internals ======\n\n/** Combines value flags for set operations. */\nfunction combineOperationValues(op: TokenID, v1: boolean, v2: boolean): boolean {\n switch (op) {\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.SET_UNION:\n return v1 && v2;\n case TokenID.SET_INTERSECTION:\n return v1 || v2;\n case TokenID.SET_MINUS:\n return v1;\n default:\n return v1 && v2;\n }\n}\n"],"mappings":"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"}
@@ -1,10 +1,2 @@
1
- /** Represents computability class. */
2
- declare const ValueClass: {
3
- readonly VALUE: "value";
4
- readonly PROPERTY: "property";
5
- };
6
- type ValueClass = (typeof ValueClass)[keyof typeof ValueClass];
7
- /** ValueClass context. */
8
- type ValueClassContext = Map<string, ValueClass>;
9
-
10
- export { ValueClass, type ValueClassContext };
1
+ import { n as ValueClassContext, t as ValueClass } from "../../value-class-CNI-lqXJ.js";
2
+ export { ValueClass, ValueClassContext };
@@ -1,9 +1,10 @@
1
- // src/rslang/semantic/value-class.ts
2
- var ValueClass = {
3
- VALUE: "value",
4
- PROPERTY: "property"
5
- };
6
- export {
7
- ValueClass
1
+ //#region src/rslang/semantic/value-class.ts
2
+ /** Represents computability class. */
3
+ const ValueClass = {
4
+ VALUE: "value",
5
+ PROPERTY: "property"
8
6
  };
7
+ //#endregion
8
+ export { ValueClass };
9
+
9
10
  //# sourceMappingURL=value-class.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rslang/semantic/value-class.ts"],"sourcesContent":["/* Module: Calculation for RSLang. */\n\n/** Represents computability class. */\nexport const ValueClass = {\n VALUE: 'value',\n PROPERTY: 'property'\n} as const;\nexport type ValueClass = (typeof ValueClass)[keyof typeof ValueClass];\n\n/** ValueClass context. */\nexport type ValueClassContext = Map<string, ValueClass>;\n"],"mappings":";AAGO,IAAM,aAAa;AAAA,EACxB,OAAO;AAAA,EACP,UAAU;AACZ;","names":[]}
1
+ {"version":3,"file":"value-class.js","names":[],"sources":["../../../src/rslang/semantic/value-class.ts"],"sourcesContent":["/* Module: Calculation for RSLang. */\n\n/** Represents computability class. */\nexport const ValueClass = {\n VALUE: 'value',\n PROPERTY: 'property'\n} as const;\nexport type ValueClass = (typeof ValueClass)[keyof typeof ValueClass];\n\n/** ValueClass context. */\nexport type ValueClassContext = Map<string, ValueClass>;\n"],"mappings":";;AAGA,MAAa,aAAa;CACxB,OAAO;CACP,UAAU;AACZ"}
@@ -1,33 +1,2 @@
1
- import { ExpressionType } from './semantic/typification.js';
2
- import '../shared/branded.js';
3
-
4
- /**
5
- * Module: Multi-graph for typifications.
6
- */
7
-
8
- /** Represents a single node of a {@link TypificationGraph}. */
9
- interface TypificationNodeData extends Record<string, unknown> {
10
- id: number;
11
- rank: number;
12
- text: string;
13
- parents: number[];
14
- annotations: string[];
15
- }
16
- /** Represents a typification multi-graph. */
17
- declare class TypificationGraph {
18
- /** List of nodes. */
19
- nodes: TypificationNodeData[];
20
- /** Map of nodes by ID. */
21
- nodeById: Map<number, TypificationNodeData>;
22
- /** Map of nodes by alias. */
23
- nodeByAlias: Map<string, TypificationNodeData>;
24
- /** Adds an element to the graph. */
25
- addElement(alias: string, type: ExpressionType): void;
26
- private processType;
27
- private addBaseNode;
28
- private addBooleanNode;
29
- private addCartesianNode;
30
- private addAliasAnnotation;
31
- }
32
-
33
- export { TypificationGraph, type TypificationNodeData };
1
+ import { n as TypificationNodeData, t as TypificationGraph } from "../typification-graph-6HcZ-rKH.js";
2
+ export { TypificationGraph, TypificationNodeData };
@@ -1,311 +1,99 @@
1
- // src/rslang/semantic/typification.ts
2
- var TypeID = {
3
- anyTypification: 1,
4
- integer: 2,
5
- basic: 3,
6
- tuple: 4,
7
- collection: 5,
8
- logic: 6,
9
- function: 7,
10
- predicate: 8
11
- };
12
- var LogicT = { typeID: TypeID.logic };
13
- var IntegerT = {
14
- typeID: TypeID.integer,
15
- isOrdered: true,
16
- isArithmetic: true,
17
- isIntegerCompatible: true
18
- };
19
- var AnyTypificationT = { typeID: TypeID.anyTypification };
20
- var EmptySetT = bool(AnyTypificationT);
21
- function bool(base) {
22
- return { typeID: TypeID.collection, base };
23
- }
24
- function tuple(factors) {
25
- if (factors.length < 2) {
26
- throw new Error("Tuple with less than two factors is not allowed");
27
- }
28
- return { typeID: TypeID.tuple, factors };
29
- }
30
-
31
- // src/parsing/ast.ts
32
- var TOKEN_ERROR = 0;
33
-
34
- // src/rslang/parser/token.ts
35
- var TokenID = {
36
- // Global, local IDs and literals
37
- ERROR: TOKEN_ERROR,
38
- ID_LOCAL: 258,
39
- ID_GLOBAL: 259,
40
- ID_FUNCTION: 260,
41
- ID_PREDICATE: 261,
42
- ID_RADICAL: 262,
43
- LIT_INTEGER: 263,
44
- LIT_WHOLE_NUMBERS: 264,
45
- LIT_EMPTYSET: 265,
46
- // Arithmetic
47
- PLUS: 266,
48
- MINUS: 267,
49
- MULTIPLY: 268,
50
- // Integer predicate symbols
51
- GREATER: 269,
52
- LESSER: 270,
53
- GREATER_OR_EQ: 271,
54
- LESSER_OR_EQ: 272,
55
- // Equality comparison
56
- EQUAL: 273,
57
- NOTEQUAL: 274,
58
- // Logic predicate symbols
59
- QUANTOR_UNIVERSAL: 275,
60
- QUANTOR_EXISTS: 276,
61
- LOGIC_NOT: 277,
62
- LOGIC_EQUIVALENT: 278,
63
- LOGIC_IMPLICATION: 279,
64
- LOGIC_OR: 280,
65
- LOGIC_AND: 281,
66
- // Set theory predicate symbols
67
- SET_IN: 282,
68
- SET_NOT_IN: 283,
69
- SUBSET: 284,
70
- SUBSET_OR_EQ: 285,
71
- NOT_SUBSET: 286,
72
- // Set theory operators
73
- DECART: 287,
74
- SET_UNION: 288,
75
- SET_INTERSECTION: 289,
76
- SET_MINUS: 290,
77
- SET_SYMMETRIC_MINUS: 291,
78
- BOOLEAN: 292,
79
- // Structure operations
80
- BIGPR: 293,
81
- SMALLPR: 294,
82
- FILTER: 295,
83
- CARD: 296,
84
- BOOL: 297,
85
- DEBOOL: 298,
86
- REDUCE: 299,
87
- // Term constructions prefixes
88
- DECLARATIVE: 300,
89
- RECURSIVE: 301,
90
- IMPERATIVE: 302,
91
- ITERATE: 303,
92
- ASSIGN: 304,
93
- // Punctuation
94
- PUNCTUATION_DEFINE: 305,
95
- PUNCTUATION_STRUCT: 306,
96
- PUNCTUATION_PL: 307,
97
- PUNCTUATION_PR: 308,
98
- PUNCTUATION_CL: 309,
99
- PUNCTUATION_CR: 310,
100
- PUNCTUATION_SL: 311,
101
- PUNCTUATION_SR: 312,
102
- PUNCTUATION_BAR: 313,
103
- PUNCTUATION_COMMA: 314,
104
- PUNCTUATION_SEMICOLON: 315,
105
- // ======= Non-terminal tokens =========
106
- NT_ENUM_DECL: 316,
107
- NT_TUPLE: 317,
108
- NT_ENUMERATION: 318,
109
- NT_TUPLE_DECL: 319,
110
- NT_ARG_DECL: 320,
111
- NT_FUNC_DEFINITION: 321,
112
- NT_ARGUMENTS: 322,
113
- NT_FUNC_CALL: 323,
114
- NT_DECLARATIVE_EXPR: 324,
115
- NT_IMPERATIVE_EXPR: 325,
116
- NT_RECURSIVE_FULL: 326,
117
- NT_RECURSIVE_SHORT: 327,
118
- // ======= Helper tokens ========
119
- INTERRUPT: 328,
120
- END: 329
121
- };
122
-
123
- // src/rslang/labels.ts
124
- var INTEGER_TYPE_NAME = "Z";
125
- var ANY_TYPE_NAME = "R0";
126
- var LOGIC_TYPE_NAME = "Logic";
127
- var labelTokenRecord = {
128
- [TokenID.DECART]: "\xD7",
129
- [TokenID.PUNCTUATION_PL]: "( )",
130
- [TokenID.PUNCTUATION_SL]: "[ ]",
131
- [TokenID.QUANTOR_UNIVERSAL]: "\u2200",
132
- [TokenID.QUANTOR_EXISTS]: "\u2203",
133
- [TokenID.LOGIC_NOT]: "\xAC",
134
- [TokenID.LOGIC_AND]: "&",
135
- [TokenID.LOGIC_OR]: "\u2228",
136
- [TokenID.LOGIC_IMPLICATION]: "\u21D2",
137
- [TokenID.LOGIC_EQUIVALENT]: "\u21D4",
138
- [TokenID.LIT_EMPTYSET]: "\u2205",
139
- [TokenID.LIT_WHOLE_NUMBERS]: "Z",
140
- [TokenID.MULTIPLY]: "*",
141
- [TokenID.EQUAL]: "=",
142
- [TokenID.NOTEQUAL]: "\u2260",
143
- [TokenID.GREATER_OR_EQ]: "\u2265",
144
- [TokenID.LESSER_OR_EQ]: "\u2264",
145
- [TokenID.SET_IN]: "\u2208",
146
- [TokenID.SET_NOT_IN]: "\u2209",
147
- [TokenID.SUBSET_OR_EQ]: "\u2286",
148
- [TokenID.SUBSET]: "\u2282",
149
- [TokenID.NOT_SUBSET]: "\u2284",
150
- [TokenID.SET_INTERSECTION]: "\u2229",
151
- [TokenID.SET_UNION]: "\u222A",
152
- [TokenID.SET_MINUS]: "\\",
153
- [TokenID.SET_SYMMETRIC_MINUS]: "\u2206",
154
- [TokenID.BOOLEAN]: "\u212C()",
155
- [TokenID.NT_DECLARATIVE_EXPR]: "D{}",
156
- [TokenID.NT_IMPERATIVE_EXPR]: "I{}",
157
- [TokenID.NT_RECURSIVE_FULL]: "R{}",
158
- [TokenID.BIGPR]: "Pr1()",
159
- [TokenID.SMALLPR]: "pr1()",
160
- [TokenID.FILTER]: "Fi1[]()",
161
- [TokenID.REDUCE]: "red()",
162
- [TokenID.CARD]: "card()",
163
- [TokenID.BOOL]: "bool()",
164
- [TokenID.DEBOOL]: "debool()",
165
- [TokenID.ASSIGN]: ":=",
166
- [TokenID.ITERATE]: ":\u2208"
167
- };
168
- function labelType(type) {
169
- if (!type) {
170
- return "N/A";
171
- }
172
- switch (type.typeID) {
173
- case TypeID.anyTypification:
174
- return ANY_TYPE_NAME;
175
- case TypeID.integer:
176
- return INTEGER_TYPE_NAME;
177
- case TypeID.basic:
178
- return type.baseID;
179
- case TypeID.tuple:
180
- return type.factors.map((factor) => factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)).join("\xD7");
181
- case TypeID.collection:
182
- return type.base.typeID === TypeID.collection ? `\u212C${labelType(type.base)}` : `\u212C(${labelType(type.base)})`;
183
- case TypeID.logic:
184
- return LOGIC_TYPE_NAME;
185
- case TypeID.predicate:
186
- case TypeID.function:
187
- const argsText = type.args.map((arg) => labelType(arg.type)).join(", ");
188
- return `[${argsText}] \u2192 ${labelType(type.result)}`;
189
- }
190
- }
191
-
192
- // src/rslang/typification-graph.ts
1
+ import { TypeID, bool, tuple } from "./semantic/typification.js";
2
+ import { labelType } from "./labels.js";
3
+ //#region src/rslang/typification-graph.ts
4
+ /**
5
+ * Module: Multi-graph for typifications.
6
+ */
7
+ /** Represents a typification multi-graph. */
193
8
  var TypificationGraph = class {
194
- /** List of nodes. */
195
- nodes = [];
196
- /** Map of nodes by ID. */
197
- nodeById = /* @__PURE__ */ new Map();
198
- /** Map of nodes by alias. */
199
- nodeByAlias = /* @__PURE__ */ new Map();
200
- /** Adds an element to the graph. */
201
- addElement(alias, type) {
202
- const node = this.processType(type);
203
- if (!node) {
204
- return;
205
- }
206
- this.addAliasAnnotation(node.id, alias);
207
- }
208
- processType(type) {
209
- switch (type.typeID) {
210
- case TypeID.logic:
211
- return null;
212
- case TypeID.anyTypification:
213
- case TypeID.integer:
214
- case TypeID.basic:
215
- return this.addBaseNode(type);
216
- case TypeID.collection:
217
- return this.addBooleanNode(type);
218
- case TypeID.tuple:
219
- return this.addCartesianNode(type);
220
- case TypeID.function:
221
- case TypeID.predicate:
222
- const combined = convertFunctionToTypification(type);
223
- if (!combined) {
224
- return null;
225
- }
226
- return this.processType(combined);
227
- }
228
- }
229
- addBaseNode(type) {
230
- const text = labelType(type);
231
- const existingNode = this.nodes.find((node2) => node2.text === text);
232
- if (existingNode) {
233
- return existingNode;
234
- }
235
- const node = {
236
- id: this.nodes.length,
237
- text,
238
- rank: 0,
239
- parents: [],
240
- annotations: []
241
- };
242
- this.nodes.push(node);
243
- this.nodeById.set(node.id, node);
244
- return node;
245
- }
246
- addBooleanNode(type) {
247
- const baseNode = this.processType(type.base);
248
- if (!baseNode) {
249
- return null;
250
- }
251
- const existingNode = this.nodes.find((node2) => node2.parents.length === 1 && node2.parents[0] === baseNode.id);
252
- if (existingNode) {
253
- return existingNode;
254
- }
255
- const node = {
256
- id: this.nodes.length,
257
- rank: baseNode.rank + 1,
258
- text: labelType(type),
259
- parents: [baseNode.id],
260
- annotations: []
261
- };
262
- this.nodes.push(node);
263
- this.nodeById.set(node.id, node);
264
- return node;
265
- }
266
- addCartesianNode(type) {
267
- const factors = type.factors.map((factor) => this.processType(factor)).filter((factor) => factor !== null);
268
- if (factors.length !== type.factors.length) {
269
- return null;
270
- }
271
- const existingNode = this.nodes.find(
272
- (node2) => node2.parents.length === factors.length && node2.parents.every((p, i) => p === factors[i].id)
273
- );
274
- if (existingNode) {
275
- return existingNode;
276
- }
277
- const node = {
278
- id: this.nodes.length,
279
- text: labelType(type),
280
- rank: Math.max(...factors.map((factor) => factor.rank)) + 1,
281
- parents: factors.map((factor) => factor.id),
282
- annotations: []
283
- };
284
- this.nodes.push(node);
285
- this.nodeById.set(node.id, node);
286
- return node;
287
- }
288
- addAliasAnnotation(node, alias) {
289
- const nodeToAnnotate = this.nodeById.get(node);
290
- if (!nodeToAnnotate) {
291
- throw new Error(`Node ${node} not found`);
292
- }
293
- nodeToAnnotate.annotations.push(alias);
294
- this.nodeByAlias.set(alias, nodeToAnnotate);
295
- }
9
+ /** List of nodes. */
10
+ nodes = [];
11
+ /** Map of nodes by ID. */
12
+ nodeById = /* @__PURE__ */ new Map();
13
+ /** Map of nodes by alias. */
14
+ nodeByAlias = /* @__PURE__ */ new Map();
15
+ /** Adds an element to the graph. */
16
+ addElement(alias, type) {
17
+ const node = this.processType(type);
18
+ if (!node) return;
19
+ this.addAliasAnnotation(node.id, alias);
20
+ }
21
+ processType(type) {
22
+ switch (type.typeID) {
23
+ case TypeID.logic: return null;
24
+ case TypeID.anyTypification:
25
+ case TypeID.integer:
26
+ case TypeID.basic: return this.addBaseNode(type);
27
+ case TypeID.collection: return this.addBooleanNode(type);
28
+ case TypeID.tuple: return this.addCartesianNode(type);
29
+ case TypeID.function:
30
+ case TypeID.predicate:
31
+ const combined = convertFunctionToTypification(type);
32
+ if (!combined) return null;
33
+ return this.processType(combined);
34
+ }
35
+ }
36
+ addBaseNode(type) {
37
+ const text = labelType(type);
38
+ const existingNode = this.nodes.find((node) => node.text === text);
39
+ if (existingNode) return existingNode;
40
+ const node = {
41
+ id: this.nodes.length,
42
+ text,
43
+ rank: 0,
44
+ parents: [],
45
+ annotations: []
46
+ };
47
+ this.nodes.push(node);
48
+ this.nodeById.set(node.id, node);
49
+ return node;
50
+ }
51
+ addBooleanNode(type) {
52
+ const baseNode = this.processType(type.base);
53
+ if (!baseNode) return null;
54
+ const existingNode = this.nodes.find((node) => node.parents.length === 1 && node.parents[0] === baseNode.id);
55
+ if (existingNode) return existingNode;
56
+ const node = {
57
+ id: this.nodes.length,
58
+ rank: baseNode.rank + 1,
59
+ text: labelType(type),
60
+ parents: [baseNode.id],
61
+ annotations: []
62
+ };
63
+ this.nodes.push(node);
64
+ this.nodeById.set(node.id, node);
65
+ return node;
66
+ }
67
+ addCartesianNode(type) {
68
+ const factors = type.factors.map((factor) => this.processType(factor)).filter((factor) => factor !== null);
69
+ if (factors.length !== type.factors.length) return null;
70
+ const existingNode = this.nodes.find((node) => node.parents.length === factors.length && node.parents.every((p, i) => p === factors[i].id));
71
+ if (existingNode) return existingNode;
72
+ const node = {
73
+ id: this.nodes.length,
74
+ text: labelType(type),
75
+ rank: Math.max(...factors.map((factor) => factor.rank)) + 1,
76
+ parents: factors.map((factor) => factor.id),
77
+ annotations: []
78
+ };
79
+ this.nodes.push(node);
80
+ this.nodeById.set(node.id, node);
81
+ return node;
82
+ }
83
+ addAliasAnnotation(node, alias) {
84
+ const nodeToAnnotate = this.nodeById.get(node);
85
+ if (!nodeToAnnotate) throw new Error(`Node ${node} not found`);
86
+ nodeToAnnotate.annotations.push(alias);
87
+ this.nodeByAlias.set(alias, nodeToAnnotate);
88
+ }
296
89
  };
297
90
  function convertFunctionToTypification(type) {
298
- if (!("args" in type) || type.args.length === 0) {
299
- return null;
300
- }
301
- const args = type.args.length === 1 ? type.args[0].type : tuple(type.args.map((arg) => arg.type));
302
- if (type.result.typeID === TypeID.logic) {
303
- return bool(args);
304
- } else {
305
- return bool(tuple([type.result, args]));
306
- }
91
+ if (!("args" in type) || type.args.length === 0) return null;
92
+ const args = type.args.length === 1 ? type.args[0].type : tuple(type.args.map((arg) => arg.type));
93
+ if (type.result.typeID === TypeID.logic) return bool(args);
94
+ else return bool(tuple([type.result, args]));
307
95
  }
308
- export {
309
- TypificationGraph
310
- };
96
+ //#endregion
97
+ export { TypificationGraph };
98
+
311
99
  //# sourceMappingURL=typification-graph.js.map