pascalabcnet/TreeConverter/TreeConversion/name_reflector.cs
AlexanderZemlyak efb4a4338f
New checks for directives added (#3099)
* Extract base classes from ParserTools (local) and GPPGParserHelper

* Fix string resources error

* Extract base class for unexpected token error

* Update ParserTools project file

* Add comments for compiler directives usages in compiler

* Add directives checks

* Move string constants to new project

* Implement scalable directives checks

* Remove known directives from compiler

* Fix PABCSystem namespace error

* Allow region and endregion with no params

* Allow parameters to endif directive

* Delete directive parameters extension checks

* Replace error with warning for uknown directive case

* Fix generate native code (semantic rule) assigning

* Improve error messages for directives

* Rename RunParseThread to SwitchOnIntellisence

Для отладки может требоваться отключение Intellisence на уровне кода. Для понятности метод назван SwitchOnIntellisence.

* Resolve merge conflicts

* Add new compiler errors for unsupported target framework and output file type

* Add documentation to directives checks

* Fix directives check loop
2024-05-04 20:21:50 +03:00

98 lines
4.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;
namespace PascalABCCompiler.TreeConverter
{
public class name_reflector
{
private static System.Collections.Generic.Dictionary<int, string> ht = new System.Collections.Generic.Dictionary<int, string>();
private static System.Collections.Generic.Dictionary<string, int> pc = new System.Collections.Generic.Dictionary<string, int>();
static name_reflector()
{
ht.Add(((int)(SyntaxTree.Operators.LogicalAND)),StringConstants.and_name);
ht.Add(((int)(SyntaxTree.Operators.Division)),StringConstants.div_name);
ht.Add(((int)(SyntaxTree.Operators.IntegerDivision)),StringConstants.idiv_name);
ht.Add(((int)(SyntaxTree.Operators.Equal)),StringConstants.eq_name);
ht.Add(((int)(SyntaxTree.Operators.Greater)),StringConstants.gr_name);
ht.Add(((int)(SyntaxTree.Operators.GreaterEqual)),StringConstants.greq_name);
ht.Add(((int)(SyntaxTree.Operators.ModulusRemainder)),StringConstants.mod_name);
ht.Add(((int)(SyntaxTree.Operators.Multiplication)),StringConstants.mul_name);
ht.Add(((int)(SyntaxTree.Operators.LogicalNOT)), StringConstants.not_name);
ht.Add(((int)(SyntaxTree.Operators.NotEqual)),StringConstants.noteq_name);
ht.Add(((int)(SyntaxTree.Operators.LogicalOR)),StringConstants.or_name);
ht.Add(((int)(SyntaxTree.Operators.Plus)),StringConstants.plus_name);
ht.Add(((int)(SyntaxTree.Operators.BitwiseLeftShift)),StringConstants.shl_name);
ht.Add(((int)(SyntaxTree.Operators.BitwiseRightShift)),StringConstants.shr_name);
ht.Add(((int)(SyntaxTree.Operators.Less)),StringConstants.sm_name);
ht.Add(((int)(SyntaxTree.Operators.LessEqual)),StringConstants.smeq_name);
ht.Add(((int)(SyntaxTree.Operators.Minus)),StringConstants.minus_name);
ht.Add(((int)(SyntaxTree.Operators.BitwiseXOR)),StringConstants.xor_name);
ht.Add(((int)(SyntaxTree.Operators.AssignmentAddition)), StringConstants.plusassign_name);
ht.Add(((int)(SyntaxTree.Operators.AssignmentSubtraction)), StringConstants.minusassign_name);
ht.Add(((int)(SyntaxTree.Operators.AssignmentMultiplication)), StringConstants.multassign_name);
ht.Add(((int)(SyntaxTree.Operators.AssignmentDivision)), StringConstants.divassign_name);
ht.Add(((int)(SyntaxTree.Operators.Assignment)), StringConstants.assign_name);
ht.Add(((int)(SyntaxTree.Operators.In)), StringConstants.in_name);
ht.Add(((int)(SyntaxTree.Operators.Implicit)), StringConstants.implicit_operator_name);
ht.Add(((int)(SyntaxTree.Operators.Explicit)), StringConstants.explicit_operator_name);
ht.Add(((int)(SyntaxTree.Operators.Power)), StringConstants.power_name);
pc.Add(StringConstants.and_name, 2);
pc.Add(StringConstants.div_name, 2);
pc.Add(StringConstants.idiv_name, 2);
pc.Add(StringConstants.eq_name, 2);
pc.Add(StringConstants.gr_name, 2);
pc.Add(StringConstants.greq_name, 2);
pc.Add(StringConstants.mod_name, 2);
pc.Add(StringConstants.mul_name, 2);
pc.Add(StringConstants.not_name, 1);
pc.Add(StringConstants.noteq_name, 2);
pc.Add(StringConstants.or_name, 2);
pc.Add(StringConstants.plus_name, 2);
pc.Add(StringConstants.shl_name, 2);
pc.Add(StringConstants.shr_name, 2);
pc.Add(StringConstants.sm_name, 2);
pc.Add(StringConstants.smeq_name, 2);
pc.Add(StringConstants.minus_name, 2);
pc.Add(StringConstants.xor_name, 2);
pc.Add(StringConstants.plusassign_name, 2);
pc.Add(StringConstants.minusassign_name, 2);
pc.Add(StringConstants.multassign_name, 2);
pc.Add(StringConstants.divassign_name, 2);
pc.Add(StringConstants.assign_name, 2);
pc.Add(StringConstants.in_name, 2);
pc.Add(StringConstants.power_name, 2);
pc.Add(StringConstants.implicit_operator_name, 1);
pc.Add(StringConstants.explicit_operator_name, 1);
}
public static string get_name(SyntaxTree.Operators ot)
{
string str;
if (ht.TryGetValue((int)ot, out str))
{
return str;
}
return null;
}
public static int get_params_count(string operator_name)
{
int count;
if (pc.TryGetValue(operator_name, out count))
{
return count;
}
return -1;
}
}
}