ConceptPortal-public/rsconcept/frontend/src/utils/enums.ts
2023-08-22 22:38:27 +03:00

180 lines
7.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! RS language token types enumeration
export enum TokenID {
// Global, local IDs and literals
ID_LOCAL = 258,
ID_GLOBAL,
ID_FUNCTION,
ID_PREDICATE,
ID_RADICAL,
LIT_INTEGER,
LIT_INTSET,
LIT_EMPTYSET,
// Aithmetic
PLUS,
MINUS,
MULTIPLY,
// Integer predicate symbols
GREATER,
LESSER,
GREATER_OR_EQ,
LESSER_OR_EQ,
// Equality comparison
EQUAL,
NOTEQUAL,
// Logic predicate symbols
FORALL,
EXISTS,
NOT,
EQUIVALENT,
IMPLICATION,
OR,
AND,
// Set theory predicate symbols
IN,
NOTIN,
SUBSET,
SUBSET_OR_EQ,
NOTSUBSET,
// Set theory operators
DECART,
UNION,
INTERSECTION,
SET_MINUS,
SYMMINUS,
BOOLEAN,
// Structure operations
BIGPR,
SMALLPR,
FILTER,
CARD,
BOOL,
DEBOOL,
REDUCE,
// Term constructions prefixes
DECLARATIVE,
RECURSIVE,
IMPERATIVE,
// Punctuation
PUNC_DEFINE,
PUNC_STRUCT,
PUNC_ASSIGN,
PUNC_ITERATE,
PUNC_PL,
PUNC_PR,
PUNC_CL,
PUNC_CR,
PUNC_SL,
PUNC_SR,
PUNC_BAR,
PUNC_COMMA,
PUNC_SEMICOLON,
// ======= Non-terminal tokens =========
NT_ENUM_DECL, // Перечисление переменных в кванторной декларации
NT_TUPLE, // Кортеж (a,b,c), типизация B(T(a)xT(b)xT(c))
NT_ENUMERATION, // Задание множества перечислением
NT_TUPLE_DECL, // Декларация переменных с помощью кортежа
NT_ARG_DECL, // Объявление аргумента
NT_FUNC_DEFINITION, // Определение функции
NT_ARGUMENTS, // Задание аргументов функции
NT_FUNC_CALL, // Вызов функции
NT_DECLARATIVE_EXPR, // Задание множества с помощью выражения D{x из H | A(x) }
NT_IMPERATIVE_EXPR, // Императивное определение
NT_RECURSIVE_FULL, // Полная рекурсия
NT_RECURSIVE_SHORT, // Сокращенная рекурсия
NT_IMP_DECLARE, // Блок декларации
NT_IMP_ASSIGN, // Блок присвоения
NT_IMP_LOGIC, // Блок проверки
// ======= Helper tokens ========
INTERRUPT,
END,
}
export enum RSErrorClass {
LEXER,
PARSER,
SEMANTIC,
UNKNOWN
}
export enum RSErrorType {
syntax = 0x8400, // Неизвестная синтаксическая ошибка
missingParanthesis = 0x8406, // Пропущена скобка ')'
missingCurlyBrace = 0x8407, // Пропущена скобка '}'
invalidQuantifier = 0x8408, // Некорректная кванторная декларация
expectedArgDeclaration = 0x8414, // Ожидалось объявление аргументов
expectedLocal = 0x8415, // Ожидалось имя локальной переменной
localDoubleDeclare = 0x2801, // Повторное использование одного и того же имени переменной
localNotUsed = 0x2802, // Переменная объявлена но не использована
localUndeclared = 0x8801, // Использование необъявленной переменной
localShadowing = 0x8802, // Повторное объявление переменной
typesNotEqual = 0x8803, // Некорректное использование операций
globalNotTyped = 0x8804, // Не определена типизация глобальной конституенты
invalidDecart = 0x8805, // Одна из проекций не является множеством
invalidBoolean = 0x8806, // Попытка взять булеан от элемента, не имеющего характер множества
invalidTypeOperation = 0x8807, // Применение ТМО к операндам, не имеющим характер множества
invalidCard = 0x8808, // Мощность множества не определена для элемента
invalidDebool = 0x8809, // Дебулеан берется от немножества
globalFuncMissing = 0x880A, // Неизвестное имя функции
globalFuncWithoutArgs = 0x880B, // Некорректное использование имени функции без аргументов
invalidReduce = 0x8810, // Red можно брать только от двойного булеана
invalidProjectionTuple = 0x8811, // Не определена проекция
invalidProjectionSet = 0x8812, // Большая проекция определена только для множеств!
invalidEnumeration = 0x8813, // Типизация аргументов перечисления не совпадает
ivalidBinding = 0x8814, // Количество переменных в кортеже не соответствует размерности декартова произведения
localOutOfScope = 0x8815, // Использование имени вне области видимости
invalidElementPredicat = 0x8816, // Несоответствие типов для проверки принадлежности
invalidArgsArtity = 0x8818, // Некорректное количество аргументов терм-функции
invalidArgumentType = 0x8819, // Типизация аргумента не совпадает с объявленной
invalidEqualsEmpty = 0x881A, // Сравнение с пустым множеством не множества
globalStructure = 0x881C, // Родовая структура должна быть ступенью
globalExpectedFunction = 0x881F, // Ожидалось выражение объявления функции
emptySetUsage = 0x8820, // Некорректное использование пустого множества как типизированного выражения
radicalUsage = 0x8821, // Радикалы запрещены вне деклараций терм-функций
invalidFilterArgumentType = 0x8822, // Типизация аргумента фильтра не корректна
invalidFilterArity = 0x8823, // Количество параметров фильра не соответствует количеству индексов
arithmeticNotSupported = 0x8824, // Для данного типа не поддерживается арифметика
typesNotCompatible = 0x8825, // Типы не совместимы в данном контексте
orderingNotSupported = 0x8826, // Для данного типа не поддерживается порядок элементов
// !!!! Добавлены по сравнению с ConceptCore !!!!!
globalNonemptyBase = 0x8827, // Непустое выражение базисного/константного множества
globalUnexpectedType = 0x8828, // Типизация выражения не соответствует типу конституенты
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
globalNoValue = 0x8840, // Используется неинтерпретируемый глобальный идентификатор
invalidPropertyUsage = 0x8841, // Использование свойства в качестве значения
globalMissingAST = 0x8842, // Не удалось получить дерево разбора для глобального идентификатора
globalFuncNoInterpretation = 0x8843, // Функция не интерпретируется для данных аргументов
}
const ERRCODE_LEXER_MASK = 0x0200;
const ERRCODE_PARSER_MASK = 0x0400;
const ERRCODE_TYPE_MASK = 0x0800;
export function resolveErrorClass(error: RSErrorType): RSErrorClass {
if ((error & ERRCODE_LEXER_MASK) !== 0) {
return RSErrorClass.LEXER;
} else if ((error & ERRCODE_PARSER_MASK) !== 0) {
return RSErrorClass.PARSER;
} else if ((error & ERRCODE_TYPE_MASK) !== 0) {
return RSErrorClass.SEMANTIC;
} else {
return RSErrorClass.UNKNOWN;
}
}