/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
TreeConverter/TreeRealization/constant_definitions.cs
504 строки
16 KB
Mikhalkovich Stanislav
Mikhalkovich в Copyright
28 июл 2019, 23:53
28 июл 2019, 23:53
e603b1f
Код
Авторство
О чём код?
// 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.TreeRealization { /// <summary> /// Класс, представляющий определение константы. /// </summary> [Serializable] public abstract class constant_definition_node : definition_node, SemanticTree.IConstantDefinitionNode { public override string ToString() => "const " + name + " : " + type; /// <summary> /// Имя константы. /// </summary> private readonly string _name; /// <summary> /// Значение константы. /// </summary> private constant_node _cn; /// <summary> /// Место, где определена константа. /// </summary> private readonly location _loc; /// <summary> /// Конструктор узла. /// </summary> /// <param name="name">Имя константы.</param> /// <param name="loc">Расположение константы.</param> public constant_definition_node(string name, location loc) { _name = name; _loc = loc; } /// <summary> /// Конструктор узла. /// </summary> /// <param name="name">Имя константы.</param> /// <param name="cn">Значение константы.</param> /// <param name="loc">Расположение константы.</param> public constant_definition_node(string name, constant_node cn, location loc) { _name = name; _cn = cn; _loc = loc; } /// <summary> /// Место, где определена константа. /// Это свойство используется при генерации дерева. /// </summary> public location loc { get { return _loc; } } /// <summary> /// Место, где определена константа. /// Это свойство используется при обходе дерева посетителем. /// </summary> public SemanticTree.ILocation Location { get { return loc; } } /// <summary> /// Имя константы. /// </summary> public string name { get { return _name; } } /// <summary> /// Тип константы. /// </summary> public type_node type { get { return _cn.type; } } /// <summary> /// Значение константы. /// </summary> public constant_node const_value { get { return _cn; } set { _cn = value; } } /// <summary> /// Обобщенный тип узла. /// </summary> public override general_node_type general_node_type { get { return general_node_type.constant_definition; } } /// <summary> /// Метод для обхода дерева посетителем. /// </summary> /// <param name="visitor">Класс - посетитель дерева.</param> public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// <summary> /// Тип константы. /// Используется при обходе дерева посетителем. /// </summary> SemanticTree.ITypeNode SemanticTree.IConstantDefinitionNode.type { get { return _cn.type; } } /// <summary> /// Значение константы. /// Используется при обходе дерева посетителем. /// </summary> public SemanticTree.IConstantNode constant_value { get { return _cn; } } } //TODO: Возможно стоит сделать шаблонный тип для всех видов определений констант. /// <summary> /// Класс, представляющий определение константы в пространстве имен. /// </summary> [Serializable] public class namespace_constant_definition : constant_definition_node, SemanticTree.INamespaceConstantDefinitionNode { /// <summary> /// Пространство имен в котором определена константа. /// </summary> private readonly common_namespace_node _comprehensive_namespace; public namespace_constant_definition(string name, location loc, common_namespace_node comprehensive_namespace) : base(name, loc) { _comprehensive_namespace = comprehensive_namespace; } /// <summary> /// Конструктор класса. /// </summary> /// <param name="name">Имя константы.</param> /// <param name="cn">Значени константы.</param> /// <param name="loc">Расположение определения константы.</param> /// <param name="comprehensive_namespace">Пространство имен в котором определена константа.</param> public namespace_constant_definition(string name, constant_node cn, location loc, common_namespace_node comprehensive_namespace) : base(name,cn,loc) { _comprehensive_namespace = comprehensive_namespace; } /// <summary> /// Пространство имен в котором определена константа. /// </summary> public common_namespace_node comprehensive_namespace { get { return _comprehensive_namespace; } } /// <summary> /// Метод для обхода дерева посетителем. /// </summary> /// <param name="visitor">Класс - посетитель дерева.</param> public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// <summary> /// Тип узла. /// </summary> public override semantic_node_type semantic_node_type { get { return semantic_node_type.namespace_constant_definition; } } /// <summary> /// Пространство имен в котором определена константа. /// Используется при обходе дерева посетителем. /// </summary> SemanticTree.ICommonNamespaceNode SemanticTree.INamespaceConstantDefinitionNode.comprehensive_namespace { get { return _comprehensive_namespace; } } } /// <summary> /// Класс, представляющий определение константы в классе. /// </summary> [Serializable] public class class_constant_definition : constant_definition_node, SemanticTree.IClassConstantDefinitionNode { /// <summary> /// Тип, содержащий определение константы. /// </summary> private readonly common_type_node _comprehensive_type; private SemanticTree.field_access_level _fal = SemanticTree.field_access_level.fal_internal; public class_constant_definition(string name, location loc, common_type_node comprehensive_type, SemanticTree.field_access_level field_access_level) : base(name, loc) { _comprehensive_type = comprehensive_type; _fal = field_access_level; } /// <summary> /// Конструктор класса. /// </summary> /// <param name="name">Имя константы.</param> /// <param name="cn">Значение константы.</param> /// <param name="loc">Расположение константы.</param> /// <param name="comprehensive_type">Тип, содержащий константу.</param> public class_constant_definition(string name, constant_node cn, location loc, common_type_node comprehensive_type, SemanticTree.field_access_level field_access_level) : base(name,cn,loc) { _comprehensive_type = comprehensive_type; _fal = field_access_level; } /// <summary> /// Тип, содержащий константу. /// </summary> public common_type_node comperehensive_type { get { return _comprehensive_type; } } /// <summary> /// Тип узла. /// </summary> public override semantic_node_type semantic_node_type { get { return semantic_node_type.class_constant_definition; } } /// <summary> /// Метод для обхода дерева посетителем. /// </summary> /// <param name="visitor">Класс - посетитель дерева.</param> public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// <summary> /// Тип, содержащий константу. /// Используется при обходе дерева посетителем. /// </summary> SemanticTree.ITypeNode SemanticTree.IClassMemberNode.comperehensive_type { get { return _comprehensive_type; } } public SemanticTree.polymorphic_state polymorphic_state { get { return SemanticTree.polymorphic_state.ps_static; } } public SemanticTree.field_access_level field_access_level { get { return _fal; } } SemanticTree.ITypeNode SemanticTree.IConstantDefinitionNode.type { get { return const_value.type; } } } /// <summary> /// Класс, представляющий определение константы в откомпилированном классе. /// </summary> [Serializable] public class compiled_class_constant_definition : constant_definition_node, SemanticTree.ICompiledClassConstantDefinitionNode { /// <summary> /// Тип, содержащий определение константы. /// </summary> private readonly compiled_type_node _comprehensive_type; private System.Reflection.FieldInfo _fi; /// <summary> /// Конструктор класса. /// </summary> public compiled_class_constant_definition(System.Reflection.FieldInfo fi, constant_node cn) : base(fi.Name, cn, null) { _comprehensive_type = compiled_type_node.get_type_node(fi.DeclaringType); _fi = fi; } public System.Reflection.FieldInfo field { get { return _fi; } } /// <summary> /// Тип, содержащий константу. /// </summary> SemanticTree.ITypeNode SemanticTree.IClassMemberNode.comperehensive_type { get { return _comprehensive_type; } } /// <summary> /// Тип узла. /// </summary> public override semantic_node_type semantic_node_type { get { return semantic_node_type.compiled_class_constant_definition; } } /// <summary> /// Метод для обхода дерева посетителем. /// </summary> /// <param name="visitor">Класс - посетитель дерева.</param> public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// <summary> /// Тип, содержащий константу. /// Используется при обходе дерева посетителем. /// </summary> SemanticTree.ICompiledTypeNode SemanticTree.ICompiledClassConstantDefinitionNode.comprehensive_type { get { return _comprehensive_type; } } #region IClassMemberNode Members public SemanticTree.polymorphic_state polymorphic_state { get { return SemanticTree.polymorphic_state.ps_static; } } public SemanticTree.field_access_level field_access_level { get { return NetHelper.NetHelper.GetFieldAccessLevel(_fi); } } #endregion } /// <summary> /// Класс, представляющий определение константы в классе. /// </summary> [Serializable] public class function_constant_definition : constant_definition_node, SemanticTree.ICommonFunctionConstantDefinitionNode { /// <summary> /// Тип, содержащий определение константы. /// </summary> private readonly common_function_node _comprehensive_function; public function_constant_definition(string name, location loc, common_function_node comprehensive_function) : base(name, loc) { _comprehensive_function = comprehensive_function; } /// <summary> /// Конструктор класса. /// </summary> /// <param name="name">Имя константы.</param> /// <param name="cn">Значение константы.</param> /// <param name="loc">Расположение константы.</param> /// <param name="comprehensive_function">Функция, содержащая константу.</param> public function_constant_definition(string name, constant_node cn, location loc, common_function_node comprehensive_function) : base(name, cn, loc) { _comprehensive_function = comprehensive_function; } /// <summary> /// Функция, содержащая константу. /// </summary> public common_function_node comprehensive_function { get { return _comprehensive_function; } } /// <summary> /// Тип узла. /// </summary> public override semantic_node_type semantic_node_type { get { return semantic_node_type.function_constant_definition; } } /// <summary> /// Метод для обхода дерева посетителем. /// </summary> /// <param name="visitor">Класс - посетитель дерева.</param> public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// <summary> /// Функция, в которой определена константа. /// Используется при обходе дерева посетителем. /// </summary> SemanticTree.ICommonFunctionNode SemanticTree.ICommonFunctionConstantDefinitionNode.comprehensive_function { get { return _comprehensive_function; } } } }