From 086f5b93cd3f974feabcd8fdef6de5cd7f649de1 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Mon, 13 May 2024 12:50:08 +0300 Subject: [PATCH] Implement rslang grammar update (pyconcept 0.1.5) --- .vscode/settings.json | 1 + rsconcept/backend/requirements.txt | 2 +- rsconcept/frontend/package-lock.json | 92 +++++++++---------- rsconcept/frontend/package.json | 8 +- .../components/RSInput/rslang/parser.terms.ts | 16 ++-- .../src/components/RSInput/rslang/parser.ts | 14 +-- .../RSInput/rslang/rslangFull.grammar | 31 ++----- .../src/components/RSInput/textEditing.ts | 8 +- rsconcept/frontend/src/models/rslang.ts | 9 +- .../EditorRSExpression/RSEditControls.tsx | 4 +- rsconcept/frontend/src/styling/color.ts | 7 +- rsconcept/frontend/src/utils/labels.ts | 15 ++- 12 files changed, 93 insertions(+), 114 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4647d123..43d13195 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -111,6 +111,7 @@ "Slng", "SMALLPR", "Stylesheet", + "symminus", "tagset", "tailwindcss", "tanstack", diff --git a/rsconcept/backend/requirements.txt b/rsconcept/backend/requirements.txt index d953be3b..50014924 100644 --- a/rsconcept/backend/requirements.txt +++ b/rsconcept/backend/requirements.txt @@ -7,7 +7,7 @@ drf-spectacular==0.27.2 coreapi==2.3.3 django-rest-passwordreset==1.4.1 cctext==0.1.3 -pyconcept==0.1.4 +pyconcept==0.1.5 psycopg2-binary==2.9.9 gunicorn==22.0.0 \ No newline at end of file diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json index b763b191..ad365e23 100644 --- a/rsconcept/frontend/package-lock.json +++ b/rsconcept/frontend/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "@lezer/lr": "^1.4.0", - "@tanstack/react-table": "^8.16.0", + "@tanstack/react-table": "^8.17.0", "@uiw/codemirror-themes": "^4.22.0", "@uiw/react-codemirror": "^4.22.0", "axios": "^1.6.8", @@ -23,7 +23,7 @@ "react-intl": "^6.6.6", "react-loader-spinner": "^5.4.5", "react-pdf": "^7.7.3", - "react-router-dom": "^6.23.0", + "react-router-dom": "^6.23.1", "react-select": "^5.8.0", "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", @@ -35,7 +35,7 @@ "@lezer/generator": "^1.7.0", "@types/jest": "^29.5.12", "@types/node": "^20.12.11", - "@types/react": "^18.3.1", + "@types/react": "^18.3.2", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", @@ -43,7 +43,7 @@ "autoprefixer": "^10.4.19", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.6", + "eslint-plugin-react-refresh": "^0.4.7", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-tsdoc": "^0.2.17", "jest": "^29.7.0", @@ -2623,9 +2623,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", - "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", "engines": { "node": ">=14.0.0" } @@ -2655,9 +2655,9 @@ } }, "node_modules/@tanstack/react-table": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.16.0.tgz", - "integrity": "sha512-rKRjnt8ostqN2fercRVOIH/dq7MAmOENCMvVlKx6P9Iokhh6woBGnIZEkqsY/vEJf1jN3TqLOb34xQGLVRuhAg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.0.tgz", + "integrity": "sha512-LSJxTDzlKGs8EN7/UHB1l3yLR9HUIxoHFkTbTjHaUUGL4kgYZFYhsQsdDJSIykG86qpIA/6gSWmtwNfy5Iprhw==", "dependencies": { "@tanstack/table-core": "8.16.0" }, @@ -2819,9 +2819,9 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", + "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -4500,9 +4500,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.761", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz", - "integrity": "sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ==" + "version": "1.4.763", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz", + "integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==" }, "node_modules/ellipsize": { "version": "0.5.1", @@ -4656,9 +4656,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", - "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", "dev": true, "peerDependencies": { "eslint": ">=7" @@ -8238,16 +8238,16 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8836,11 +8836,11 @@ } }, "node_modules/react-router": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", - "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", "dependencies": { - "@remix-run/router": "1.16.0" + "@remix-run/router": "1.16.1" }, "engines": { "node": ">=14.0.0" @@ -8850,12 +8850,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", - "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", "dependencies": { - "@remix-run/router": "1.16.0", - "react-router": "6.23.0" + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" }, "engines": { "node": ">=14.0.0" @@ -9211,9 +9211,9 @@ } }, "node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "devOptional": true, "bin": { "semver": "bin/semver.js" @@ -9575,31 +9575,31 @@ } }, "node_modules/sucrase/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", "minimatch": "^9.0.1", "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "path-scurry": "^1.11.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/sucrase/node_modules/minipass": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", - "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -9790,9 +9790,9 @@ } }, "node_modules/three-stdlib": { - "version": "2.29.11", - "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.29.11.tgz", - "integrity": "sha512-vSyUavKCwOJQd2ch9IHhyJVx6eNG3y+z3/LulqHM7OLMy81OqnmIrvc2b4phKr/c1aVjHRNG2X7JOklfrDDcmQ==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.30.0.tgz", + "integrity": "sha512-ALL7rn57jq/MovDRk5hGjeWCvOeZlZhFCWIdpbBAQNudCO3nMwxEba5ZulsMgiI1ymQMzUzTMcxhLTCVlUaKDw==", "dependencies": { "@types/draco3d": "^1.4.0", "@types/offscreencanvas": "^2019.6.4", diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json index a3eb382f..0eef9d08 100644 --- a/rsconcept/frontend/package.json +++ b/rsconcept/frontend/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@lezer/lr": "^1.4.0", - "@tanstack/react-table": "^8.16.0", + "@tanstack/react-table": "^8.17.0", "@uiw/codemirror-themes": "^4.22.0", "@uiw/react-codemirror": "^4.22.0", "axios": "^1.6.8", @@ -27,7 +27,7 @@ "react-intl": "^6.6.6", "react-loader-spinner": "^5.4.5", "react-pdf": "^7.7.3", - "react-router-dom": "^6.23.0", + "react-router-dom": "^6.23.1", "react-select": "^5.8.0", "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", @@ -39,7 +39,7 @@ "@lezer/generator": "^1.7.0", "@types/jest": "^29.5.12", "@types/node": "^20.12.11", - "@types/react": "^18.3.1", + "@types/react": "^18.3.2", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", @@ -47,7 +47,7 @@ "autoprefixer": "^10.4.19", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.6", + "eslint-plugin-react-refresh": "^0.4.7", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-tsdoc": "^0.2.17", "jest": "^29.7.0", diff --git a/rsconcept/frontend/src/components/RSInput/rslang/parser.terms.ts b/rsconcept/frontend/src/components/RSInput/rslang/parser.terms.ts index 3ad8777c..b9021547 100644 --- a/rsconcept/frontend/src/components/RSInput/rslang/parser.terms.ts +++ b/rsconcept/frontend/src/components/RSInput/rslang/parser.terms.ts @@ -1,16 +1,16 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. export const Expression = 1, - Literal = 2, - Local = 3, - Index = 4, - Global = 5, - Radical = 6, + Local = 2, + Index = 3, + Literal = 5, + Global = 6, + Radical = 7, Filter = 20, ComplexIndex = 21, PrefixD = 26, PrefixI = 27, - PrefixR = 31, - Function = 32, - TextFunction = 33, + PrefixR = 29, + Function = 31, + TextFunction = 32, Predicate = 45 diff --git a/rsconcept/frontend/src/components/RSInput/rslang/parser.ts b/rsconcept/frontend/src/components/RSInput/rslang/parser.ts index 012a30f8..1f3daaf5 100644 --- a/rsconcept/frontend/src/components/RSInput/rslang/parser.ts +++ b/rsconcept/frontend/src/components/RSInput/rslang/parser.ts @@ -3,16 +3,16 @@ import {LRParser} from "@lezer/lr" import {highlighting} from "./highlight" export const parser = LRParser.deserialize({ version: 14, - states: "6hO!sQPOOOOQO'#C^'#C^O!zQPO'#C_OOQO'#Dl'#DlO&bQPO'#DeOVQPO'#DnO&iQPO'#DpO'yQPO'#DuO(RQQO'#DvO(WQPO'#DwO(]QPO'#D{O(bQPO'#EOOOQO'#Do'#DoO(gQQO'#C}OOQO'#C}'#C}OOQO'#Dh'#DhO(lQPO'#DhO(qQPO'#DhOVQPO'#EVO(vQPO'#EVO({QPO'#EVO)TQPO'#DeOOQO'#Df'#DfO)OQPO'#EZQOQPOOOOQO'#C`'#C`OOQO,58y,58yO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:YO&iQPO,5:RO)fQPO'#DqO)mQPO,5:YO+QQPO'#DrO+VQPO,5:`O+_QPO,5:QO,[QPO,5:cO-TQPO'#DqO&iQPO'#DnO-bQPO,5:[OOQO'#Dq'#DqO&iQPO,5:aOOQO,5:a,5:aO-jQPO,5:bO({QPO,5:cO&iQPO,5:gO({QPO,5:jOOQO,59i,59iO&iQPO,5:SO&iQPO,5:SO%TQPO'#DgOOQO,5:q,5:qO&iQPO,5:qOOQO'#Dx'#DxO({QPO'#DxO-oQPO,5:qOOQO'#EW'#EWOVQPO,5:tOVQPO,5:tOVQPO,5:tOVQPO,5:tO-wQPO'#E]OOQO'#E['#E[O-|QPO,5:uOOQO1G/t1G/tO0RQPO1G/tO0YQPO1G/tO2^QPO1G/tO4bQPO1G/tO4iQPO1G/tO4pQPO1G/tO5YQPO1G/tO6{QPO1G/mO&iQPO,5:^OOQO1G/z1G/zOOQO1G/l1G/lO&iQPO1G/}OOQO1G/v1G/vO7lQPO1G/{O&iQPO1G/|O7sQPO1G/}O7xQPO1G0RO8PQPO1G0UO8UQPO1G/nO8^QPO1G/nO8eQPO1G0]OOQO'#Dz'#DzO8mQPO,5:dO8uQPO'#DyO({QPO,5:sO8zQPO1G0]OOQO1G0`1G0`O:vQPO1G0`O:}QPO1G0`O;UQPO1G0`O&iQPO,5:wO)OQPO,5:vOVQPO1G0aO;sQPO1G/xOeQPO'#D}OOQO'#D|'#D|O>yQPO<oO&iQPOAN>nOVQPOAN>oO&iQPO,5:iOVQPO,5:hOOQOAN>sAN>sOVQPOAN>vOOQOG24ZG24ZO@YQPOG24YO@aQPOG24ZO@rQPO1G0TOOQO1G0S1G0SO@|QPOG24bOATQPOG24bOOQOLD)tLD)tOOQOLD)uLD)uOOQOLD)|LD)|O&iQPOLD)|OAfQPO!$'MhOOQO!)9CS!)9CSO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YO8zQPO,5:YOAmQPO1G/tOCfQPO1G/tOGbQPO1G/tOIlQPO1G/tOIsQPO1G/tOIzQPO1G/tOJRQPO1G/t", - stateData: "L]~O!WOS~OTROURO_TOaUOcVOdWOjXOkYOoZOp`O|bO}cO!OdO!PdO!]PO!^PO!_PO!aQO!s]O!t]O!u^O!v^O!w^O!x^O~OfgO~PVO!]iOVRXWRXXRXYRXZRX[RX]RX^RXhRXrRXsRXtRXuRXvRXwRXxRXyRXzRX{RX!URX!gRXbRX!QRX!RRX!SRX!TRX`RXiRXmRXgRXlRXnRX~OVkOWlOXmOYnOZoO[pO]qO^rOhsOrsOssOtsOusOvsOwsOxsOysOzsO{sO~O!U!XX~P%TOTROURO_{OaUOcVOdWOjXOkYOoZOp`O!]PO!^PO!_PO!aQO!s]O!t]O!u^O!v^O!w^O!x^O~O_!OOcVO~Oe!QO~Oa!RO~Oa!SO~Oa!TO~Oe!UO~Of!VO~O_!WO~Of!ZO~O_!]O!aQO~O!Q!`O!R!aO!S!bO!T!cO!U!XX~O!g!eX~P%TO`!gOV![XW![XX![XY![XZ![X[![X]![X^![Xh![Xr![Xs![Xt![Xu![Xv![Xw![Xx![Xy![Xz![X{![X!g![X~O!g!pO~O`!qO!g!eX~O`!rO!Q!`O!R!aO!S!bO!T!cO~OV!`XW!`XX!`XY!`XZ!`X[!`X]!`X^!`X~Oh!sOb!`X!g!`X~P+pOVkOWlOXmOYnOZoO[pO]qO^rO~Ob!eX!g!eXg!eX~P,iOb!tO!g!pO~Of!vO~Oh#RO!g#QO~Oh#WO~Og#YO!g#XO~OVkOX!biY!biZ!bi[!bi]!bi^!bih!bir!bis!bit!biu!biv!biw!bix!biy!biz!bi{!bi!U!bi`!bi!g!bib!bi!Q!bi!R!bi!S!bi!T!bii!big!bin!bi~OW!bi~P.UOWlO~P.UOVkOWlOXmO^rOZ!bi[!bi]!bih!bir!bis!bit!biu!biv!biw!bix!biy!biz!bi{!bi!U!bi`!bi!g!bib!bi!Q!bi!R!bi!S!bi!T!bii!big!bin!bi~OY!bi~P0aOVkOWlOXmOYnO]qO^rO[!bih!bir!bis!bit!biu!biv!biw!bix!biy!biz!bi{!bi!U!bi`!bi!g!bib!bi!Q!bi!R!bi!S!bi!T!bii!big!bin!bi~OZ!bi~P2eOZoO~P2eOYnO~P0aOY!biZ!bi[!bi]!bi^!bi~OVkOWlOXmOh!bir!bis!bit!biu!biv!biw!bix!biy!biz!bi{!bi!U!bi`!bi!g!bib!bi!Q!bi!R!bi!S!bi!T!bii!big!bin!bi~P4wO!Q!Zi!R!Zi!S!Zi!T!Zi!U!Zi`!Zib!Zin!Zii!Zi~P,iO`#]O~P,iOh#_O~Oi#`O~P,iOm#aO~Og#bO!g!pO~O`#bO~P,iOg#cO!g!pO~O`#dO!g!nX~O!g#eO~OTROURO_{OaUOcVOdWOjXOkYOoZOp`O!]PO!^PO!_PO!a#gO!s]O!t]O!u^O!v^O!w^O!x^O~O!Q!`O!S!|i!T!|i!U!|i`!|ib!|in!|ii!|i~O!R!|i~P:[O!R!aO~P:[O!Q!`O!R!aO!S!bO!T!|i!U!|i`!|ib!|in!|ii!|i~O`!fi!g!fib!fig!fi~P,iOi#lO~P,iOg#mO!g!pO~OV$[OW$]OX$^OY$_OZ$`O[$aO]$bO^$cO~PVOg#Pi!g#Pi~P,iO_#wO~Oi#xO~P,iOl#yOm#yOh!`Xr!`Xs!`Xt!`Xu!`Xv!`Xw!`Xx!`Xy!`Xz!`X{!`X~P+pO!Q!`O!R!aO!S!bO!T!cOb!qXn!qX~Ob#{On#zO~Oi#|O~P,iO!Q!`O!R!aO!S!bO!T!cO!U!yy`!yyb!yyn!yyi!yy~Ob#}O!Q!`O!R!aO!S!bO!T!cO~O`$UO~P,iOb$VO!Q!`O!R!aO!S!bO!T!cO~Ob!qin!qi~P,iOb$WO~P%TOi$XO!Q!`O!R!aO!S!bO!T!cO~Ob$ZO~P,iOV$[OT!biU!biW!biX!bi_!bia!bic!bid!bij!bik!bio!bip!bi|!bi}!bi!O!bi!P!bi!]!bi!^!bi!_!bi!a!bi!s!bi!t!bi!u!bi!v!bi!w!bi!x!bi~P4wOV$[OW$]OT!biU!biX!bi_!bia!bic!bid!bij!bik!bio!bip!bi|!bi}!bi!O!bi!P!bi!]!bi!^!bi!_!bi!a!bi!s!bi!t!bi!u!bi!v!bi!w!bi!x!bi~P4wOV$[OW$]OX$^O^$cOT!biU!biZ!bi[!bi]!bi_!bia!bic!bid!bij!bik!bio!bip!bi|!bi}!bi!O!bi!P!bi!]!bi!^!bi!_!bi!a!bi!s!bi!t!bi!u!bi!v!bi!w!bi!x!bi~OY!bi~PE_OV$[OW$]OX$^OY$_O]$bO^$cOT!biU!bi[!bi_!bia!bic!bid!bij!bik!bio!bip!bi|!bi}!bi!O!bi!P!bi!]!bi!^!bi!_!bi!a!bi!s!bi!t!bi!u!bi!v!bi!w!bi!x!bi~OZ!bi~PGiOZ$`O~PGiOY$_O~PE_OV$[OW$]OX$^OT!biU!bi_!bia!bic!bid!bij!bik!bio!bip!bi|!bi}!bi!O!bi!P!bi!]!bi!^!bi!_!bi!a!bi!s!bi!t!bi!u!bi!v!bi!w!bi!x!bi~P4wOd!s}pTU!u!v!w!x!t!aokjk~", - goto: "/j#QPP#R$V%kPPPPPPPPPPPPPPPPPPPPPPPPPPPP%nPPPPPPPPPPPPPPPPPPPPP&r&x'p(QPPP#RP*h#R+n,r-SP+n-^+n+n.e.w.z+n.}/Q+nPPPPPP'p/W/Z'p/^/a/d#T_OTUbklmnopqrs{!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#`#a#h#l#w#x#y#z#|$X$[$]$^$_$`$a$b$c!|ROTbklmnopqrs{!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#a#h#l#w#x#y#|$X$[$]$^$_$`$a$b$cQyU[![d!R!T!]#Q#eS!dg#XT#o#`#zRjQ#TaOTUbklmnopqrs{!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#`#a#h#l#w#x#y#z#|$X$[$]$^$_$`$a$b$cQhOR#k#YSeO#YQxTQ!YbQ#S!`Q#T!aQ#U!bQ#V!cS#p#`#zQ#u#hQ#v#lQ$P#xR$T#|mfOTb!`!a!b!c#Y#`#h#l#x#z#|SSO#YQtTYzU{!V!Z!vd!Xb!`!a!b!c#`#h#l#x#zS!gk$[Q!hlQ!imQ!jnQ!koQ!lpQ!mqQ!nrQ!osQ!u!OQ!x!SQ!{!WQ#Z!pQ#[!sQ#h#RQ#i#WQ#n#_Q#s#aQ$O#wQ$Q#yQ$S#|Q$Y$XQ$d$]Q$e$^Q$f$_Q$g$`Q$h$aQ$i$bR$j$c#O_OUbklmnopqrs!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#`#a#h#l#w#x#y#z#|$X$[$]$^$_$`$a$b$cTuT{#T[OTUbklmnopqrs{!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#`#a#h#l#w#x#y#z#|$X$[$]$^$_$`$a$b$cSvT{Q|UQ!z!VQ!|!ZR#^!vSwT{X}U!V!Z!v#S[OTUbklmnopqrs{!O!S!V!W!Z!`!a!b!c!p!s!v#R#W#Y#_#`#a#h#l#w#x#y#z#|$X$[$]$^$_$`$a$b$cR!PVQ!_dQ!w!RQ!y!TQ!}!]Q#f#QR#t#eR#O!]R#P!]R#r#`Q#q#`R$R#zR!^dR!_dRhOR!fgQ!egR#j#X", - nodeNames: "⚠ Expression Literal Local Index Global Radical + - * ∪ \\ ∆ ∩ × ( ) { } ℬ Filter ComplexIndex [ ] ∈ | PrefixD PrefixI :∈ := ; PrefixR Function TextFunction ∉ ⊆ ⊄ ⊂ > ≥ < ≤ ≠ = ¬ Predicate ∀ ∃ ⇔ ⇒ ∨ &", - maxTerm: 93, + states: "5lO!sQPOOO!zQPO'#C^OOQO'#Ca'#CaO%uQPO'#DqOOQO'#Dq'#DqO(SQPO'#DeOVQPO'#DrO(ZQPO'#DtO)kQPO'#DuO)sQQO'#DvO)xQPO'#DwO)}QPO'#DxO*SQPO'#DzOOQO'#Ds'#DsO*XQPO'#DsO+uQQO'#C|OOQO'#C|'#C|OOQO'#Dn'#DnO+zQPO'#DnO,PQPO'#DnO,UQPO'#DgOVQPO'#ESO,^QPO'#ESO,cQPO'#ESO,kQPO'#DeOOQO'#Df'#DfO,fQPO'#EVQOQPOOOOQO'#C_'#C_OOQO,58x,58xO(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:^O(ZQPO,5:RO,|QPO'#DmO-TQPO,5:^O.hQPO,5:VO.pQPO'#DlO.uQPO,5:QO/WQPO,5:cO/yQPO'#DmO(ZQPO'#DrO0WQPO,5:`OOQO'#Dm'#DmO(ZQPO,5:aOOQO,5:a,5:aO0`QPO,5:bO,cQPO,5:cO(ZQPO,5:dO,cQPO,5:fOOQO,59h,59hO(ZQPO,5:YO(ZQPO,5:YO&uQPO'#DgOOQO,5:n,5:nO(ZQPO,5:nO(ZQPO'#DkOOQO'#Dh'#DhOOQO'#ET'#ETO0eQPO,5:nOVQPO,5:pOVQPO,5:pOVQPO,5:pOVQPO,5:pO0mQPO'#EXOOQO'#EW'#EWO0rQPO,5:qOOQO1G/x1G/xO2wQPO1G/xO3OQPO1G/xO5SQPO1G/xO7WQPO1G/xO7_QPO1G/xO7fQPO1G/xO8OQPO1G/xO9qQPO1G/mOOQO1G/q1G/qO(ZQPO,5:WOOQO1G/l1G/lO(ZQPO1G/}OOQO1G/z1G/zO:bQPO1G/{O(ZQPO1G/|O:iQPO1G/}O:nQPO1G0OO:uQPO1G0QO:zQPO1G/tO;SQPO1G/tO;ZQPO1G0YO,cQPO,5:oO;cQPO1G0YOOQO1G0[1G0[O=_QPO1G0[O=fQPO1G0[O=mQPO1G0[O(ZQPO,5:sO,fQPO,5:rOVQPO1G0]O>[QPO1G/rO>lQPO7+%iOOQO7+%g7+%gO>sQPO7+%hO(ZQPO7+%iOVQPO7+%jO(ZQPO7+%lOOQO7+%`7+%`OOQO7+%t7+%tOOQO1G0Z1G0ZOOQO'#C^'#C^O>{QPO7+%tO?iQPO1G0_OOQO1G0^1G0^OOQO7+%w7+%wOVQPO<oO(ZQPOAN>nOVQPOAN>oOVQPO,5:eOOQOAN>pAN>pOVQPOAN>rOOQOG24ZG24ZOAtQPOG24YOA{QPOG24ZOB^QPO1G0POBrQPOG24^OByQPOG24^OOQOLD)tLD)tOOQOLD)uLD)uOOQOLD)xLD)xO(ZQPOLD)xOC[QPO!$'MdOOQO!)9CO!)9COO;cQPO,5:^O;cQPO,5:^O;cQPO,5:^O;cQPO,5:^O;cQPO,5:^O;cQPO,5:^O;cQPO,5:^O;cQPO,5:^OCcQPO1G/xOE[QPO1G/xOIWQPO1G/xOKbQPO1G/xOKiQPO1G/xOKpQPO1G/xOKwQPO1G/x", + stateData: "NR~O!WOS~OSUOUSOVSOaVOcWOdXOjYOkZOm[OobO|eO}fO!OgO!PgO!]PO!^QO!cQO!dQO!o_O!p_O!q`O!r`O!s`O!t`O~OfjO~PVO!^lOWQXXQXYQXZQX[QX]QX^QX_QXhQXnQXqQXrQXsQXtQXuQXvQXwQXxQXyQXzQX{QX!UQX!uQXbQX!QQX!RQX!SQX!TQX`QXiQXgQXlQX~OW!eXX!eXY!eXZ!eX[!eX]!eX^!eX_!eX!u!eXb!eX~Oh!eXn![Xq![Xr!eXs!eXt!eXu!eXv!eXw!eXx!eXy!eXz!eX{!eX!U!eX~P%TOWnOXoOYpOZqO[rO]sO^tO_uOhvOrvOsvOtvOuvOvvOwvOxvOyvOzvO{vO~O!U!XX~P&uOS!OOUSOVSOaVOcWOdXOjYOkZOm[OobO!]PO!^QO!cQO!dQO!o_O!p_O!q`O!r`O!s`O!t`O~OS!ROcWO~Oe!TO~Oa!UO~Oa!VO~Oa!WO~OW!gXX!gXY!gXZ!gX[!gX]!gX^!gX_!gXh!gXn![Xq![Xr!gXs!gXt!gXu!gXv!gXw!gXx!gXy!gXz!gX{!gX!U!gX!u!gXb!gX~Oe!XO~Of!YO~OS!ZO~OnvOqvO~Of!^O~OS!_O!]PO~O!Q!cO!R!dO!S!eO!T!fO!U!XX~O!u!aX~P&uO`!jOW!bXX!bXY!bXZ!bX[!bX]!bX^!bX_!bXh!bXr!bXs!bXt!bXu!bXv!bXw!bXx!bXy!bXz!bX{!bX!u!bX~O`!sO!u!aX~O!u!tO~O`!uO!Q!cO!R!dO!S!eO!T!fO~Oh!vO~P%TOWnOXoOYpOZqO[rO]sO^tO_uO~Ob!aX!u!aXg!aX~P/_Ob!wO!u!tO~Of!yO~Oh#RO!u#QO~Oh#WO~Og#YO!u#XO~OWnOY!fiZ!fi[!fi]!fi^!fi_!fih!fir!fis!fit!fiu!fiv!fiw!fix!fiy!fiz!fi{!fi!U!fi`!fi!u!fib!fi!Q!fi!R!fi!S!fi!T!fii!fig!fil!fi~OX!fi~P0zOXoO~P0zOWnOXoOYpO_uO[!fi]!fi^!fih!fir!fis!fit!fiu!fiv!fiw!fix!fiy!fiz!fi{!fi!U!fi`!fi!u!fib!fi!Q!fi!R!fi!S!fi!T!fii!fig!fil!fi~OZ!fi~P3VOWnOXoOYpOZqO^tO_uO]!fih!fir!fis!fit!fiu!fiv!fiw!fix!fiy!fiz!fi{!fi!U!fi`!fi!u!fib!fi!Q!fi!R!fi!S!fi!T!fii!fig!fil!fi~O[!fi~P5ZO[rO~P5ZOZqO~P3VOZ!fi[!fi]!fi^!fi_!fi~OWnOXoOYpOh!fir!fis!fit!fiu!fiv!fiw!fix!fiy!fiz!fi{!fi!U!fi`!fi!u!fib!fi!Q!fi!R!fi!S!fi!T!fii!fig!fil!fi~P7mO!Q!Zi!R!Zi!S!Zi!T!Zi!U!Zi`!Zib!Zil!Zii!Zi~P/_O`#]O~P/_Oh#_O~Oi#`O~P/_On#aO~Og#bO!u!tO~O`#bO~P/_Og#cO!u!tO~OS!OOUSOVSOaVOcWOdXOjYOkZOm[OobO!]#eO!^QO!cQO!dQO!o_O!p_O!q`O!r`O!s`O!t`O~O!Q!cO!S!xi!T!xi!U!xi`!xib!xil!xii!xi~O!R!xi~P ≥ < ≤ ≠ = ¬ Predicate ∀ ∃ ⇔ ⇒ ∨ &", + maxTerm: 89, propSources: [highlighting], skippedNodes: [0], repeatNodeCount: 0, - tokenData: "4i~R!jX^%spq%svw&hxy&myz&rz{&w{|&||}'R}!O'W!Q!R']!R!['e![!](T!]!^(h!^!_(m!_!`(r!`!a(w!c!d(|!e!f(|!f!g)[!h!i)d!k!l)z!r!s*P!t!u*g!u!v(|!v!w(|!z!{(|!|!}*w!}#O*|#O#P+R#P#Q+W#R#S+]#T#U+]#U#V+h#V#W,z#W#X.Z#X#d+]#d#e0a#e#f+]#f#g1P#g#o+]#o#p2Q#p#q2V#q#r2[#y#z%s$f$g%s$r$s2a%o%p2f5i6S+]#BY#BZ%s$IS$I_%s$I|$JO%s$JT$JU%s$KV$KW%s% l% m2k%%Y%%Z2p%%[%%]2u%&Y%&Z2z%&]%&^3P%&_%&`3U%&`%&a3Z%&b%&c3`%&c%&d3e%'S%'T3j%'T%'U3o%'U%'V3t%(^%(_3y%(b%(c4O%(c%(d4T%)Q%)R4Y%)S%)T4_%)U%)V4d&FU&FV%s~%xY!W~X^%spq%s#y#z%s$f$g%s#BY#BZ%s$IS$I_%s$I|$JO%s$JT$JU%s$KV$KW%s&FU&FV%s~&mO!T~~&rO_~~&wO`~~&|OX~~'ROV~~'WO!g~~']OW~P'bP!]P!Q![']R'lQeQ!]P|}'r!Q!['eQ'uP!R!['xQ'}QeQ|}'r!Q!['x~(WQ!_!`(^%&b%&c(c~(cOm~~(hOl~~(mOn~~(rOx~~(wO{~~(|Ov~~)PP!Q![)S~)XPT~!Q![)S~)aPj~!Q![)S~)gQ!Q![)m#]#^)u~)rPp~!Q![)m~)zOd~~*POk~~*SQ!Q![*Y#f#g*b~*_P}~!Q![*Y~*gO!s~~*lPo~!Q![*o~*tPU~!Q![*o~*|O!_~~+ROf~~+WOZ~~+]Og~~+bQ!a~#T#o+]5i6S+]~+mS!a~#T#c+]#c#d+y#d#o+]5i6S+]~,OS!a~#T#c+]#c#d,[#d#o+]5i6S+]~,aS!a~#T#`+]#`#a,m#a#o+]5i6S+]~,tQ!v~!a~#T#o+]5i6S+]~-PR!a~#T#U-Y#U#o+]5i6S+]~-_S!a~#T#f+]#f#g-k#g#o+]5i6S+]~-pS!a~#T#W+]#W#X-|#X#o+]5i6S+]~.TQ!u~!a~#T#o+]5i6S+]~.`S!a~#T#X+]#X#Y.l#Y#o+]5i6S+]~.qS!a~#T#U+]#U#V.}#V#o+]5i6S+]~/SS!a~#T#c+]#c#d/`#d#o+]5i6S+]~/eS!a~#T#c+]#c#d/q#d#o+]5i6S+]~/vS!a~#T#`+]#`#a0S#a#o+]5i6S+]~0ZQ!w~!a~#T#o+]5i6S+]~0fS!a~#T#f+]#f#g0r#g#o+]5i6S+]~0yQ!t~!a~#T#o+]5i6S+]~1US!a~#T#X+]#X#Y1b#Y#o+]5i6S+]~1gS!a~#T#W+]#W#X1s#X#o+]5i6S+]~1zQ!x~!a~#T#o+]5i6S+]~2VOa~~2[Oi~~2aOb~~2fO|~~2kO^~~2pOc~~2uO!R~~2zO!Q~~3PO!O~~3UO!P~~3ZO!^~~3`O[~~3eOh~~3jOr~~3oO!S~~3tO]~~3yOY~~4OOz~~4TOy~~4YOw~~4_Ou~~4dOt~~4iOs~", + tokenData: "4i~R!jX^%spq%svw&hxy&myz&rz{&w{|&||}'R}!O'W!Q!R']!R!['e![!](T!]!^(h!^!_(m!_!`(r!`!a(w!c!d(|!e!f(|!f!g)[!h!i)d!k!l)z!r!s*P!t!u*g!u!v(|!v!w(|!z!{(|!|!}*w!}#O*|#O#P+R#P#Q+W#R#S+]#T#U+]#U#V+h#V#W,z#W#X.Z#X#d+]#d#e0a#e#f+]#f#g1P#g#o+]#o#p2Q#p#q2V#q#r2[#y#z%s$f$g%s$r$s2a%o%p2f5i6S+]#BY#BZ%s$IS$I_%s$I|$JO%s$JT$JU%s$KV$KW%s% l% m2k%%Y%%Z2p%%[%%]2u%&Y%&Z2z%&]%&^3P%&_%&`3U%&`%&a3Z%&b%&c3`%&c%&d3e%'S%'T3j%'T%'U3o%'U%'V3t%(^%(_3y%(b%(c4O%(c%(d4T%)Q%)R4Y%)S%)T4_%)U%)V4d&FU&FV%s~%xY!W~X^%spq%s#y#z%s$f$g%s#BY#BZ%s$IS$I_%s$I|$JO%s$JT$JU%s$KV$KW%s&FU&FV%s~&mO!T~~&rOS~~&wO`~~&|OY~~'ROW~~'WO!u~~']OX~P'bP!^P!Q![']R'lQeQ!^P|}'r!Q!['eQ'uP!R!['xQ'}QeQ|}'r!Q!['x~(WQ!_!`(^%&b%&c(c~(cOn~~(hOq~~(mOl~~(rOx~~(wO{~~(|Ov~~)PP!Q![)S~)XPU~!Q![)S~)aPj~!Q![)S~)gQ!Q![)m#]#^)u~)rPo~!Q![)m~)zOd~~*POk~~*SQ!Q![*Y#f#g*b~*_P}~!Q![*Y~*gO!o~~*lPm~!Q![*o~*tPV~!Q![*o~*|O!d~~+ROf~~+WO[~~+]Og~~+bQ!]~#T#o+]5i6S+]~+mS!]~#T#c+]#c#d+y#d#o+]5i6S+]~,OS!]~#T#c+]#c#d,[#d#o+]5i6S+]~,aS!]~#T#`+]#`#a,m#a#o+]5i6S+]~,tQ!r~!]~#T#o+]5i6S+]~-PR!]~#T#U-Y#U#o+]5i6S+]~-_S!]~#T#f+]#f#g-k#g#o+]5i6S+]~-pS!]~#T#W+]#W#X-|#X#o+]5i6S+]~.TQ!q~!]~#T#o+]5i6S+]~.`S!]~#T#X+]#X#Y.l#Y#o+]5i6S+]~.qS!]~#T#U+]#U#V.}#V#o+]5i6S+]~/SS!]~#T#c+]#c#d/`#d#o+]5i6S+]~/eS!]~#T#c+]#c#d/q#d#o+]5i6S+]~/vS!]~#T#`+]#`#a0S#a#o+]5i6S+]~0ZQ!s~!]~#T#o+]5i6S+]~0fS!]~#T#f+]#f#g0r#g#o+]5i6S+]~0yQ!p~!]~#T#o+]5i6S+]~1US!]~#T#X+]#X#Y1b#Y#o+]5i6S+]~1gS!]~#T#W+]#W#X1s#X#o+]5i6S+]~1zQ!t~!]~#T#o+]5i6S+]~2VOa~~2[Oi~~2aOb~~2fO|~~2kO_~~2pOc~~2uO!R~~2zO!Q~~3PO!O~~3UO!P~~3ZO!c~~3`O]~~3eOh~~3jOr~~3oO!S~~3tO^~~3yOZ~~4OOz~~4TOy~~4YOw~~4_Ou~~4dOt~~4iOs~", tokenizers: [0, 1], topRules: {"Expression":[0,1]}, - tokenPrec: 1974 + tokenPrec: 2056 }) diff --git a/rsconcept/frontend/src/components/RSInput/rslang/rslangFull.grammar b/rsconcept/frontend/src/components/RSInput/rslang/rslangFull.grammar index 9d4ec469..1a1972eb 100644 --- a/rsconcept/frontend/src/components/RSInput/rslang/rslangFull.grammar +++ b/rsconcept/frontend/src/components/RSInput/rslang/rslangFull.grammar @@ -119,14 +119,11 @@ Index { } variable { Local | - "(" variableComposite ")" + tuple } -variableComposite { - var_all "," variable -} -var_all { +variable_pack { variable | - variableComposite + variable_pack "," variable } @@ -139,6 +136,8 @@ logic { } logic_predicates { + variable ":∈" setexpr | + variable ":=" setexpr | setexpr "∈" setexpr | setexpr "∉" setexpr | setexpr "⊆" setexpr | @@ -155,15 +154,8 @@ logic_predicates { logic_unary { !not "¬" logic | Predicate "[" setexpr_enum "]" | - "∀" quant_var "∈" setexpr !quant logic | - "∃" quant_var "∈" setexpr !quant logic -} -quant_var { - variable | - quant_var_enum -} -quant_var_enum { - quant_var "," variable + "∀" variable_pack "∈" setexpr !quant logic | + "∃" variable_pack "∈" setexpr !quant logic } logic_binary { @@ -256,11 +248,6 @@ imperative { PrefixI "{" setexpr "|" imp_blocks "}" } imp_blocks { - imp_block | - imp_blocks ";" imp_block -} -imp_block { - Local ":∈" setexpr | - Local ":=" setexpr | - logic + logic | + imp_blocks ";" logic } diff --git a/rsconcept/frontend/src/components/RSInput/textEditing.ts b/rsconcept/frontend/src/components/RSInput/textEditing.ts index 9ca40afb..e972e674 100644 --- a/rsconcept/frontend/src/components/RSInput/textEditing.ts +++ b/rsconcept/frontend/src/components/RSInput/textEditing.ts @@ -222,10 +222,10 @@ export class RSTextWrapper extends CodeMirrorWrapper { case TokenID.LESSER_OR_EQ: this.replaceWith('≤'); return true; - case TokenID.PUNCTUATION_ASSIGN: + case TokenID.ASSIGN: this.replaceWith(':='); return true; - case TokenID.PUNCTUATION_ITERATE: + case TokenID.ITERATE: this.replaceWith(':∈'); return true; case TokenID.MULTIPLY: @@ -247,7 +247,7 @@ export class RSTextWrapper extends CodeMirrorWrapper { case 'Digit3': return this.insertToken(TokenID.LOGIC_OR); // # case 'Digit4': return this.insertToken(TokenID.LOGIC_EQUIVALENT); // $ case 'Digit5': return this.insertToken(TokenID.SET_SYMMETRIC_MINUS); // % - case 'Digit6': return this.insertToken(TokenID.PUNCTUATION_ASSIGN); // ^ + case 'Digit6': return this.insertToken(TokenID.ASSIGN); // ^ case 'Digit7': return this.insertToken(TokenID.GREATER_OR_EQ); // & case 'Digit8': return this.insertToken(TokenID.LESSER_OR_EQ); // * case 'Digit9': return this.insertToken(TokenID.PUNCTUATION_PL); // ( @@ -276,7 +276,7 @@ export class RSTextWrapper extends CodeMirrorWrapper { case 'Digit3': return this.insertToken(TokenID.LOGIC_AND); case 'Digit4': return this.insertToken(TokenID.LOGIC_IMPLICATION); case 'Digit5': return this.insertToken(TokenID.SET_MINUS); - case 'Digit6': return this.insertToken(TokenID.PUNCTUATION_ITERATE); + case 'Digit6': return this.insertToken(TokenID.ITERATE); case 'Digit7': return this.insertToken(TokenID.SUBSET); case 'Digit8': return this.insertToken(TokenID.MULTIPLY); case 'BracketLeft': return this.insertToken(TokenID.PUNCTUATION_SL); diff --git a/rsconcept/frontend/src/models/rslang.ts b/rsconcept/frontend/src/models/rslang.ts index d8f26208..c83250c4 100644 --- a/rsconcept/frontend/src/models/rslang.ts +++ b/rsconcept/frontend/src/models/rslang.ts @@ -162,11 +162,12 @@ export enum TokenID { RECURSIVE, IMPERATIVE, + ITERATE, + ASSIGN, + // Punctuation PUNCTUATION_DEFINE, PUNCTUATION_STRUCT, - PUNCTUATION_ASSIGN, - PUNCTUATION_ITERATE, PUNCTUATION_PL, PUNCTUATION_PR, PUNCTUATION_CL, @@ -193,10 +194,6 @@ export enum TokenID { NT_RECURSIVE_FULL, NT_RECURSIVE_SHORT, - NT_IMP_DECLARE, - NT_IMP_ASSIGN, - NT_IMP_LOGIC, - // ======= Helper tokens ======== INTERRUPT, END diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/RSEditControls.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/RSEditControls.tsx index bded37bc..fbf895f1 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/RSEditControls.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/RSEditControls.tsx @@ -31,7 +31,7 @@ const MAIN_SECOND_ROW: TokenID[] = [ TokenID.LOGIC_AND, TokenID.LOGIC_IMPLICATION, TokenID.SET_MINUS, - TokenID.PUNCTUATION_ITERATE, + TokenID.ITERATE, TokenID.SUBSET, TokenID.DEBOOL ]; @@ -48,7 +48,7 @@ const MAIN_THIRD_ROW: TokenID[] = [ TokenID.LOGIC_OR, TokenID.LOGIC_EQUIVALENT, TokenID.SET_SYMMETRIC_MINUS, - TokenID.PUNCTUATION_ASSIGN, + TokenID.ASSIGN, TokenID.MULTIPLY, TokenID.GREATER_OR_EQ, TokenID.LESSER_OR_EQ diff --git a/rsconcept/frontend/src/styling/color.ts b/rsconcept/frontend/src/styling/color.ts index 4203577e..bf86ac2a 100644 --- a/rsconcept/frontend/src/styling/color.ts +++ b/rsconcept/frontend/src/styling/color.ts @@ -362,14 +362,11 @@ export function colorBgSyntaxTree(node: ISyntaxTreeNode, colors: IColorTheme): s case TokenID.NT_ARG_DECL: case TokenID.NT_FUNC_CALL: case TokenID.NT_ARGUMENTS: - case TokenID.NT_IMP_DECLARE: - case TokenID.NT_IMP_ASSIGN: - case TokenID.NT_IMP_LOGIC: case TokenID.NT_RECURSIVE_SHORT: return ''; - case TokenID.PUNCTUATION_ASSIGN: - case TokenID.PUNCTUATION_ITERATE: + case TokenID.ASSIGN: + case TokenID.ITERATE: return colors.bgRed; } // node diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts index f22b8eb2..e7d2e684 100644 --- a/rsconcept/frontend/src/utils/labels.ts +++ b/rsconcept/frontend/src/utils/labels.ts @@ -129,8 +129,8 @@ export function labelToken(id: TokenID): string { case TokenID.CARD: return 'card()'; case TokenID.BOOL: return 'bool()'; case TokenID.DEBOOL: return 'debool()'; - case TokenID.PUNCTUATION_ASSIGN: return ':='; - case TokenID.PUNCTUATION_ITERATE: return ':∈'; + case TokenID.ASSIGN: return ':='; + case TokenID.ITERATE: return ':∈'; } return `no label: ${id}`; } @@ -196,8 +196,8 @@ export function describeToken(id: TokenID): string { case TokenID.CARD: return prepareTooltip('Мощность', 'Alt + C'); case TokenID.BOOL: return prepareTooltip('Синглетон', 'Alt + B'); case TokenID.DEBOOL: return prepareTooltip('Десинглетон', 'Alt + V'); - case TokenID.PUNCTUATION_ASSIGN: return prepareTooltip('Присвоение', 'Alt + Shift + 6'); - case TokenID.PUNCTUATION_ITERATE: return prepareTooltip('Перебор элементов множества', 'Alt + 6'); + case TokenID.ASSIGN: return prepareTooltip('Присвоение', 'Alt + Shift + 6'); + case TokenID.ITERATE: return prepareTooltip('Перебор элементов множества', 'Alt + 6'); } return `no description: ${id}`; } @@ -533,9 +533,6 @@ export function labelSyntaxTree(node: ISyntaxTreeNode): string { case TokenID.NT_ARGUMENTS: return 'ARGS'; case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINITION'; - case TokenID.NT_IMP_DECLARE: return 'DECLARE'; - case TokenID.NT_IMP_ASSIGN: return 'ASSIGN'; - case TokenID.NT_IMP_LOGIC: return 'CHECK'; case TokenID.NT_RECURSIVE_SHORT: return labelToken(TokenID.NT_RECURSIVE_FULL); @@ -570,8 +567,8 @@ export function labelSyntaxTree(node: ISyntaxTreeNode): string { case TokenID.CARD: case TokenID.BOOL: case TokenID.DEBOOL: - case TokenID.PUNCTUATION_ASSIGN: - case TokenID.PUNCTUATION_ITERATE: + case TokenID.ASSIGN: + case TokenID.ITERATE: return labelToken(node.typeID); } // node