Esempio n. 1
0
        /// <summary>
        /// Загрузка всех классов (наследование учитывается).
        /// Допущение - классы-наследники должны располагаться после базовых классов
        /// и иерархий наследования должно быть не более 1.
        /// </summary>
        /// <param name="root">Базовый символ</param>
        /// <param name="ag">Сборка</param>
        private void LoadClassesExtends(BaseSymbol root, AssemblyGen ag)
        {
            root.Symbols.ForEach(s =>
            {
                if (s.GrammarMember == GrammarMemberType.NonTerm)
                {
                    NonTerm nonTerm = s as NonTerm;
                    switch (nonTerm.TypeNonTerm)
                    {
                    case NonTermType.Class:
                        Token termClassId;
                        NonTerm extends;
                        NonTermFactory.GetClassDecl(nonTerm, out termClassId, out extends);
                        string classId = termClassId.Value;
                        if (extends == null)
                        {
                            TypeGen cl = ag.Class(classId);
                            _classesTable.Add(cl.Name, cl);
                        }
                        else
                        {
                            Token baseClassId;
                            NonTermFactory.GetClassId(extends, out baseClassId);
                            TypeGen cl = _classesTable[baseClassId.Value];
                            cl         = ag.Class(classId, cl);
                            _classesTable.Add(cl.Name, cl);
                        }

                        break;
                    }
                }
            });
        }
Esempio n. 2
0
 /// <summary>
 /// Загрузка всех классов (наследование не учитывается).
 /// </summary>
 /// <param name="root">Базовый символ</param>
 /// <param name="ag">Сборка</param>
 private void LoadClasses(BaseSymbol root, AssemblyGen ag)
 {
     root.Symbols.ForEach(s =>
     {
         if (s.GrammarMember == GrammarMemberType.NonTerm)
         {
             NonTerm nonTerm = s as NonTerm;
             switch (nonTerm.TypeNonTerm)
             {
             case NonTermType.Class:
                 Token termClassId;
                 NonTermFactory.GetClassId(nonTerm, out termClassId);
                 string classId = termClassId.Value;
                 TypeGen cl     = ag.Class(classId);
                 _classesTable.Add(cl.Name, cl);
                 break;
             }
         }
     });
 }