pascalabcnet/Parsers/PascalABCParserNewSaushkin/Keywords.cs

203 lines
11 KiB
C#
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.

// 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;
}
}