// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using PascalABCCompiler.Parsers; namespace Languages.Pascal.Frontend.Core { public class PascalABCKeywords : BaseKeywords { protected override string FileName => "keywordsmap.pabc"; public PascalABCKeywords() : base(false) { #region Keywords Initialization CreateNewKeyword("or", Tokens.tkOr); CreateNewKeyword("xor", Tokens.tkXor); CreateNewKeyword("and", Tokens.tkAnd); CreateNewKeyword("div", Tokens.tkDiv); CreateNewKeyword("mod", Tokens.tkMod); CreateNewKeyword("shl", Tokens.tkShl); CreateNewKeyword("shr", Tokens.tkShr); CreateNewKeyword("not", Tokens.tkNot); CreateNewKeyword("as", Tokens.tkAs); CreateNewKeyword("in", Tokens.tkIn); CreateNewKeyword("is", Tokens.tkIs); CreateNewKeyword("implicit", Tokens.tkImplicit); CreateNewKeyword("explicit", Tokens.tkExplicit); CreateNewKeyword("sizeof", Tokens.tkSizeOf, treatAsFunction: true); CreateNewKeyword("typeof", Tokens.tkTypeOf, treatAsFunction: true); CreateNewKeyword("where", Tokens.tkWhere); CreateNewKeyword("array", Tokens.tkArray, isTypeKeyword: true); CreateNewKeyword("begin", Tokens.tkBegin); CreateNewKeyword("case", Tokens.tkCase); CreateNewKeyword("class", Tokens.tkClass, isTypeKeyword: true); CreateNewKeyword("const", Tokens.tkConst, KeywordKind.Const); CreateNewKeyword("constructor", Tokens.tkConstructor, KeywordKind.Constructor); CreateNewKeyword("default", Tokens.tkDefault); CreateNewKeyword("destructor", Tokens.tkDestructor, KeywordKind.Destructor); CreateNewKeyword("downto", Tokens.tkDownto); CreateNewKeyword("do", Tokens.tkDo); CreateNewKeyword("else", Tokens.tkElse); CreateNewKeyword("end", Tokens.tkEnd); CreateNewKeyword("event", Tokens.tkEvent); CreateNewKeyword("except", Tokens.tkExcept); CreateNewKeyword("exports", Tokens.tkExports); CreateNewKeyword("file", Tokens.tkFile, isTypeKeyword : true); CreateNewKeyword("finalization", Tokens.tkFinalization); CreateNewKeyword("finally", Tokens.tkFinally); CreateNewKeyword("for", Tokens.tkFor); CreateNewKeyword("foreach", Tokens.tkForeach); CreateNewKeyword("function", Tokens.tkFunction, KeywordKind.Function, true); CreateNewKeyword("goto", Tokens.tkGoto); CreateNewKeyword("if", Tokens.tkIf); CreateNewKeyword("implementation", Tokens.tkImplementation); CreateNewKeyword("inherited", Tokens.tkInherited, KeywordKind.Inherited); CreateNewKeyword("initialization", Tokens.tkInitialization); CreateNewKeyword("interface", Tokens.tkInterface); CreateNewKeyword("label", Tokens.tkLabel); CreateNewKeyword("lock", Tokens.tkLock); CreateNewKeyword("loop", Tokens.tkLoop); CreateNewKeyword("nil", Tokens.tkNil); CreateNewKeyword("procedure", Tokens.tkProcedure, KeywordKind.Function, true); CreateNewKeyword("of", Tokens.tkOf, KeywordKind.Of); CreateNewKeyword("operator", Tokens.tkOperator); CreateNewKeyword("property", Tokens.tkProperty); CreateNewKeyword("raise", Tokens.tkRaise, KeywordKind.Raise); CreateNewKeyword("record", Tokens.tkRecord, isTypeKeyword: true); CreateNewKeyword("repeat", Tokens.tkRepeat); CreateNewKeyword("set", Tokens.tkSet, isTypeKeyword : true); CreateNewKeyword("try", Tokens.tkTry); CreateNewKeyword("type", Tokens.tkType, KeywordKind.Type); CreateNewKeyword("then", Tokens.tkThen); CreateNewKeyword("to", Tokens.tkTo); CreateNewKeyword("until", Tokens.tkUntil); CreateNewKeyword("uses", Tokens.tkUses, KeywordKind.Uses); CreateNewKeyword("var", Tokens.tkVar, KeywordKind.Var); CreateNewKeyword("while", Tokens.tkWhile); CreateNewKeyword("with", Tokens.tkWith); CreateNewKeyword("program", Tokens.tkProgram, KeywordKind.Program); CreateNewKeyword("template", Tokens.tkTemplate); CreateNewKeyword("resourcestring", Tokens.tkResourceString); CreateNewKeyword("threadvar", Tokens.tkThreadvar); CreateNewKeyword("sealed", Tokens.tkSealed); CreateNewKeyword("partial", Tokens.tkPartial); CreateNewKeyword("params", Tokens.tkParams); CreateNewKeyword("unit", Tokens.tkUnit, KeywordKind.Unit); CreateNewKeyword("library", Tokens.tkLibrary); CreateNewKeyword("external", Tokens.tkExternal); CreateNewKeyword("name", Tokens.tkName); CreateNewKeyword("private", Tokens.tkPrivate); CreateNewKeyword("protected", Tokens.tkProtected); CreateNewKeyword("public", Tokens.tkPublic); CreateNewKeyword("internal", Tokens.tkInternal); CreateNewKeyword("read", Tokens.tkRead, excludedInIntellisense: true); CreateNewKeyword("write", Tokens.tkWrite, excludedInIntellisense: true); CreateNewKeyword("on", Tokens.tkOn); CreateNewKeyword("forward", Tokens.tkForward); CreateNewKeyword("abstract", Tokens.tkAbstract); CreateNewKeyword("overload", Tokens.tkOverload); CreateNewKeyword("reintroduce", Tokens.tkReintroduce); CreateNewKeyword("override", Tokens.tkOverride); CreateNewKeyword("virtual", Tokens.tkVirtual); CreateNewKeyword("extensionmethod", Tokens.tkExtensionMethod); CreateNewKeyword("new", Tokens.tkNew, KeywordKind.New); CreateNewKeyword("auto", Tokens.tkAuto); CreateNewKeyword("sequence", Tokens.tkSequence); CreateNewKeyword("yield", Tokens.tkYield); CreateNewKeyword("match", Tokens.tkMatch); CreateNewKeyword("when", Tokens.tkWhen); CreateNewKeyword("namespace", Tokens.tkNamespace); CreateNewKeyword("static", Tokens.tkStatic); CreateNewKeyword("step", Tokens.tkStep); CreateNewKeyword("index", Tokens.tkIndex); CreateNewKeyword("async", Tokens.tkAsync, excludedInIntellisense: true); CreateNewKeyword("await", Tokens.tkAwait, excludedInIntellisense: true); // В парсере это не ключевые слова CreateNewKeyword("break"); CreateNewKeyword("exit"); CreateNewKeyword("continue"); // 🇷🇺 РУССКИЕ СИНОНИМЫ // Логические операторы CreateNewKeyword("или", Tokens.tkOr); CreateNewKeyword("и", Tokens.tkAnd); CreateNewKeyword("не", Tokens.tkNot); CreateNewKeyword("исключающее_или", Tokens.tkXor); CreateNewKeyword("див", Tokens.tkDiv); CreateNewKeyword("остаток", Tokens.tkMod); // Условия и циклы CreateNewKeyword("если", Tokens.tkIf); CreateNewKeyword("то", Tokens.tkThen); CreateNewKeyword("иначе", Tokens.tkElse); CreateNewKeyword("выбор", Tokens.tkCase); CreateNewKeyword("для", Tokens.tkFor); CreateNewKeyword("от", Tokens.tkTo); CreateNewKeyword("вниз_до", Tokens.tkDownto); CreateNewKeyword("шаг", Tokens.tkStep); CreateNewKeyword("пока", Tokens.tkWhile); CreateNewKeyword("повтор", Tokens.tkRepeat); CreateNewKeyword("до", Tokens.tkUntil); CreateNewKeyword("цикл", Tokens.tkLoop); CreateNewKeyword("для_каждого", Tokens.tkForeach); // Структура программы CreateNewKeyword("нач", Tokens.tkBegin); CreateNewKeyword("кон", Tokens.tkEnd); CreateNewKeyword("алг", Tokens.tkFunction, KeywordKind.Function, true); CreateNewKeyword("проц", Tokens.tkProcedure, KeywordKind.Function, true); CreateNewKeyword("перем", Tokens.tkVar, KeywordKind.Var); CreateNewKeyword("конст", Tokens.tkConst, KeywordKind.Const); CreateNewKeyword("тип", Tokens.tkType, KeywordKind.Type); CreateNewKeyword("использовать", Tokens.tkUses, KeywordKind.Uses); CreateNewKeyword("модуль", Tokens.tkUnit, KeywordKind.Unit); CreateNewKeyword("программа", Tokens.tkProgram, KeywordKind.Program); // ООП CreateNewKeyword("класс", Tokens.tkClass, isTypeKeyword: true); CreateNewKeyword("запись", Tokens.tkRecord, isTypeKeyword: true); CreateNewKeyword("конструктор", Tokens.tkConstructor, KeywordKind.Constructor); CreateNewKeyword("деструктор", Tokens.tkDestructor, KeywordKind.Destructor); CreateNewKeyword("свойство", Tokens.tkProperty); CreateNewKeyword("наследованный", Tokens.tkInherited, KeywordKind.Inherited); CreateNewKeyword("виртуальный", Tokens.tkVirtual); CreateNewKeyword("переопределить", Tokens.tkOverride); CreateNewKeyword("абстрактный", Tokens.tkAbstract); CreateNewKeyword("приватный", Tokens.tkPrivate); CreateNewKeyword("защищенный", Tokens.tkProtected); CreateNewKeyword("публичный", Tokens.tkPublic); // Массивы и коллекции CreateNewKeyword("массив", Tokens.tkArray, isTypeKeyword: true); CreateNewKeyword("множество", Tokens.tkSet, isTypeKeyword: true); CreateNewKeyword("файл", Tokens.tkFile, isTypeKeyword: true); // Исключения CreateNewKeyword("попытка", Tokens.tkTry); CreateNewKeyword("исключение", Tokens.tkExcept); CreateNewKeyword("конец_попытки", Tokens.tkFinally); CreateNewKeyword("вызвать", Tokens.tkRaise, KeywordKind.Raise); // Прочее CreateNewKeyword("метка", Tokens.tkLabel); CreateNewKeyword("перейти", Tokens.tkGoto); CreateNewKeyword("с", Tokens.tkWith); CreateNewKeyword("в", Tokens.tkIn); CreateNewKeyword("является", Tokens.tkIs); CreateNewKeyword("как", Tokens.tkAs); CreateNewKeyword("новый", Tokens.tkNew, KeywordKind.New); CreateNewKeyword("пусто", Tokens.tkNil); CreateNewKeyword("размер", Tokens.tkSizeOf, treatAsFunction: true); CreateNewKeyword("тип_объекта", Tokens.tkTypeOf, treatAsFunction: true); #endregion } protected override int GetIdToken() => (int)Tokens.tkIdentifier; } }