pascalabcnet/Parsers/PascalABCParserNewSaushkin/Keywords.cs
AlexanderZemlyak ba4d274058
Async await merge (#3177)
* s.ToLines
RenameDirectory

* Исправление ToLines

* Убрал из грамматики узлы await - случайно оставались

* Sync `.ToLines` with `System.IO.StringReader` (#3154)

* 3.9.0.3494

* add tests

* #3152

* #3152

* Don't skip PCU errors in `CompileAllUnits`

* fix #3155

* Create the array types outside of any unit/scope

* Add `use` test

* RobotField - try в блоке создания

* Исправлена Range(a, b, step: real)

LightPT - CheckOutput может принимать параметры типа последователльность - они будут вытягиваться в одну последовательность
  Для этого исправлен FlattenElement
  FlattenOutput применяется автоматически - его теперь не надо вызывать явно
TaskLoops поправлен и упрощен в соответствии с CheckOutput

* Поправлен LightPT

Упрощены TasksArr.pas TasksMatr.pas TasksStr.pas

* fix `GetReferenceFileName` dll copy (#3173)

* Исправление зависимостей проектов (#3174)

* Add workflow to build each project separately

* Make `Compiler` depend on `PascalLanguage` and `PascalABCSaushkinParser`  06e595

* Make IDE's depend on `PABCNETC`

It's launched as a separate process from IDE

* Revert pascal language moving to language plugins (#3175)

* Return Parsers folder with standard parsers and move SyntaxTreeConverters back to Core

* Rename PascalLanguage project to PascalABCLanguageInfo

* Fix pascal dll loading

* Поправлены Tasks1Arr.pas Tasks1Begin.pas Tasks1BoolIfCase.pas

* Поправил в трех проектах пути к bin

LightPT - Read...(prompt) - больше комбинаций

Loop_If_2_Sum в Tasks1Loops.pas

* #3172

* 3.9.0.3500
Хороший коммит )

* Remove extra tests

* Fix dependencies in Compiler project

* LightPT - убрал CheckOutputNew
TasksArr.pas, TasksStr.pas - правки

* #3164

* Убрали зависимость компилятора от парсера Паскаля

---------

Co-authored-by: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Co-authored-by: Sun Serega <sunserega2@gmail.com>
Co-authored-by: Ivan Bondarev <ibond84@googlemail.com>
2024-07-05 23:04:23 +03:00

170 lines
8.9 KiB
C#

// 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 System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Languages.Pascal.Frontend.Core
{
// Статический класс, определяющий ключевые слова языка
public static class Keywords
{
private static Dictionary<string, int> keywords = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
public static Dictionary<string, string> keymap = new Dictionary<string, string>();
public static string fname = "keywordsmap.pabc";
public static void ReloadKeyMap()
{
try
{
if (keymap != null)
{
keymap.Clear();
keymap = null;
}
var fn = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName), fname);
if (System.IO.File.Exists(fn))
keymap = System.IO.File.ReadLines(fn,Encoding.Unicode).Select(s=>s.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries)).ToDictionary(w => w[0], w => w[1]);
}
catch(Exception e) // погасить любые исключения
{
//var w = e.Message;
}
}
public static string Convert(string s)
{
if (keymap == null || keymap.Count() == 0)
return s;
else if (!keymap.ContainsKey(s))
return s;
else return keymap[s];
}
public static void KeywordsAdd()
{
if (keymap == null || keymap.Count() == 0)
ReloadKeyMap();
keywords.Clear();
keywords.Add(Convert("or"), (int)Tokens.tkOr);
keywords.Add(Convert("xor"), (int)Tokens.tkXor);
keywords.Add(Convert("and"), (int)Tokens.tkAnd);
keywords.Add(Convert("div"), (int)Tokens.tkDiv);
keywords.Add(Convert("mod"), (int)Tokens.tkMod);
keywords.Add(Convert("shl"), (int)Tokens.tkShl);
keywords.Add(Convert("shr"), (int)Tokens.tkShr);
keywords.Add(Convert("not"), (int)Tokens.tkNot);
keywords.Add(Convert("as"), (int)Tokens.tkAs);
keywords.Add(Convert("in"), (int)Tokens.tkIn);
keywords.Add(Convert("is"), (int)Tokens.tkIs);
keywords.Add(Convert("implicit"), (int)Tokens.tkImplicit);
keywords.Add(Convert("explicit"), (int)Tokens.tkExplicit);
keywords.Add(Convert("sizeof"), (int)Tokens.tkSizeOf);
keywords.Add(Convert("typeof"), (int)Tokens.tkTypeOf);
keywords.Add(Convert("where"), (int)Tokens.tkWhere);
keywords.Add(Convert("array"), (int)Tokens.tkArray);
keywords.Add(Convert("begin"), (int)Tokens.tkBegin);
keywords.Add(Convert("case"), (int)Tokens.tkCase);
keywords.Add(Convert("class"), (int)Tokens.tkClass);
keywords.Add(Convert("const"), (int)Tokens.tkConst);
keywords.Add(Convert("constructor"), (int)Tokens.tkConstructor);
keywords.Add(Convert("default"), (int)Tokens.tkDefault);
keywords.Add(Convert("destructor"), (int)Tokens.tkDestructor);
keywords.Add(Convert("downto"), (int)Tokens.tkDownto);
keywords.Add(Convert("do"), (int)Tokens.tkDo);
keywords.Add(Convert("else"), (int)Tokens.tkElse);
keywords.Add(Convert("end"), (int)Tokens.tkEnd);
keywords.Add(Convert("event"), (int)Tokens.tkEvent);
keywords.Add(Convert("except"), (int)Tokens.tkExcept);
keywords.Add(Convert("exports"), (int)Tokens.tkExports);
keywords.Add(Convert("file"), (int)Tokens.tkFile);
keywords.Add(Convert("finalization"), (int)Tokens.tkFinalization);
keywords.Add(Convert("finally"), (int)Tokens.tkFinally);
keywords.Add(Convert("for"), (int)Tokens.tkFor);
keywords.Add(Convert("foreach"), (int)Tokens.tkForeach);
keywords.Add(Convert("function"), (int)Tokens.tkFunction);
keywords.Add(Convert("goto"), (int)Tokens.tkGoto);
keywords.Add(Convert("if"), (int)Tokens.tkIf);
keywords.Add(Convert("implementation"), (int)Tokens.tkImplementation);
keywords.Add(Convert("inherited"), (int)Tokens.tkInherited);
keywords.Add(Convert("initialization"), (int)Tokens.tkInitialization);
keywords.Add(Convert("interface"), (int)Tokens.tkInterface);
keywords.Add(Convert("label"), (int)Tokens.tkLabel);
keywords.Add(Convert("lock"), (int)Tokens.tkLock);
keywords.Add(Convert("loop"), (int)Tokens.tkLoop);
keywords.Add(Convert("nil"), (int)Tokens.tkNil);
keywords.Add(Convert("procedure"), (int)Tokens.tkProcedure);
keywords.Add(Convert("of"), (int)Tokens.tkOf);
keywords.Add(Convert("operator"), (int)Tokens.tkOperator);
keywords.Add(Convert("property"), (int)Tokens.tkProperty);
keywords.Add(Convert("raise"), (int)Tokens.tkRaise);
keywords.Add(Convert("record"), (int)Tokens.tkRecord);
keywords.Add(Convert("repeat"), (int)Tokens.tkRepeat);
keywords.Add(Convert("set"), (int)Tokens.tkSet);
keywords.Add(Convert("try"), (int)Tokens.tkTry);
keywords.Add(Convert("type"), (int)Tokens.tkType);
keywords.Add(Convert("then"), (int)Tokens.tkThen);
keywords.Add(Convert("to"), (int)Tokens.tkTo);
keywords.Add(Convert("until"), (int)Tokens.tkUntil);
keywords.Add(Convert("uses"), (int)Tokens.tkUses);
keywords.Add(Convert("var"), (int)Tokens.tkVar);
keywords.Add(Convert("while"), (int)Tokens.tkWhile);
keywords.Add(Convert("with"), (int)Tokens.tkWith);
keywords.Add(Convert("program"), (int)Tokens.tkProgram);
keywords.Add(Convert("template"), (int)Tokens.tkTemplate);
keywords.Add(Convert("resourcestring"), (int)Tokens.tkResourceString);
keywords.Add(Convert("threadvar"), (int)Tokens.tkThreadvar);
keywords.Add(Convert("sealed"), (int)Tokens.tkSealed);
keywords.Add(Convert("partial"), (int)Tokens.tkPartial);
keywords.Add(Convert("params"), (int)Tokens.tkParams);
keywords.Add(Convert("unit"), (int)Tokens.tkUnit);
keywords.Add(Convert("library"), (int)Tokens.tkLibrary);
keywords.Add(Convert("external"), (int)Tokens.tkExternal);
keywords.Add(Convert("name"), (int)Tokens.tkName);
keywords.Add(Convert("private"), (int)Tokens.tkPrivate);
keywords.Add(Convert("protected"), (int)Tokens.tkProtected);
keywords.Add(Convert("public"), (int)Tokens.tkPublic);
keywords.Add(Convert("internal"), (int)Tokens.tkInternal);
keywords.Add(Convert("read"), (int)Tokens.tkRead);
keywords.Add(Convert("write"), (int)Tokens.tkWrite);
keywords.Add(Convert("on"), (int)Tokens.tkOn);
keywords.Add(Convert("forward"), (int)Tokens.tkForward);
keywords.Add(Convert("abstract"), (int)Tokens.tkAbstract);
keywords.Add(Convert("overload"), (int)Tokens.tkOverload);
keywords.Add(Convert("reintroduce"), (int)Tokens.tkReintroduce);
keywords.Add(Convert("override"), (int)Tokens.tkOverride);
keywords.Add(Convert("virtual"), (int)Tokens.tkVirtual);
keywords.Add(Convert("extensionmethod"), (int)Tokens.tkExtensionMethod);
keywords.Add(Convert("new"), (int)Tokens.tkNew);
keywords.Add(Convert("auto"), (int)Tokens.tkAuto);
keywords.Add(Convert("sequence"), (int)Tokens.tkSequence);
keywords.Add(Convert("yield"), (int)Tokens.tkYield);
keywords.Add(Convert("match"), (int)Tokens.tkMatch);
keywords.Add(Convert("when"), (int)Tokens.tkWhen);
keywords.Add(Convert("namespace"), (int)Tokens.tkNamespace);
keywords.Add(Convert("static"), (int)Tokens.tkStatic);
keywords.Add(Convert("step"), (int)Tokens.tkStep);
keywords.Add(Convert("index"), (int)Tokens.tkIndex);
keywords.Add(Convert("async"), (int)Tokens.tkAsync);
keywords.Add(Convert("await"), (int)Tokens.tkAwait);
}
static Keywords()
{
KeywordsAdd();
}
public static int KeywordOrIDToken(string s)
{
//s = s.ToUpper();
int keyword = 0;
if (keywords.TryGetValue(s, out keyword))
return keyword;
else
return (int)Tokens.tkIdentifier;
}
}
}