static void Main()
        {
            Console.Write("\n  Test ScopeStack");
            Console.Write("\n =================\n");

            ScopeStack <Elem> mystack = new ScopeStack <Elem>();

            Test.Elem e;
            e.type  = "namespace";
            e.name  = "foobar";
            e.place = 14;
            mystack.push(e);
            e.make("class", "feebar", 21);
            mystack.push(e);
            e.make("function", "doTest", 44);
            mystack.push(e);
            e.make("control", "for", 56);
            mystack.push(e);

            mystack.display();
            Console.WriteLine();

            Elem test = mystack.lastPopped();

            Console.Write("\n  last popped:\n  {0}\n", test);

            e = mystack.pop();
            Console.Write("\n  popped:\n  {0}", e);
            e = mystack.pop();
            Console.Write("\n  popped:\n  {0}\n", e);
            Console.Write("\n  last popped:\n  {0}\n", mystack.lastPopped());

            mystack.display();

            Console.Write("\n\n");
        }
 public override void doAction(CSsemi.CSemiExp semi, string filename)
 {
     if (semi[1].Equals("Inheritance")) //Action for Inheritance
     {
         inheritance(semi, filename);
         return;
     }
     if (semi[0].Contains("Aggregation"))
     {
         aggregation(semi, filename);
         return;
     }
     if (semi[0].Contains("Composition"))
     {
         composition(semi, filename);
         return;
     }
     if (semi[0].Contains("Using"))
     {
         usingRelation(semi, filename);
         return;
     }
     if (semi[0].Contains("namespace"))
     {
         Elem ele = new Elem();
         ele.type = semi[0];
         ele.name = semi[1];
         ele.filename = filename;
         repo_.locations.Add(ele);
     }             
     if (semi[0].Contains("class"))
     {
         Elem ele = new Elem();
         ele.type = semi[0];
         ele.name = semi[1];
         ele.filename = filename;
         repo_.locations.Add(ele);
     }
     if (AAction.displaySemi)
     {
         Console.Write("\n  line# {0,-5}", repo_.semi.lineCount - 1);
         Console.Write("entering ");
         string indent = new string(' ', 2 * repo_.stack.count);
         Console.Write("{0}", indent);
         this.display(semi); // defined in abstract action
     }
     if (AAction.displayStack)
         repo_.stack.display();
 }
        public override void doAction(CSsemi.CSemiExp semi, string filename)
        {
            Elem elem = new Elem();
            elem.type = semi[0];  // expects type
            elem.name = semi[1];  // expects name
            elem.filename = filename;
            if (elem.type.Equals("namespace"))
                elem.namespacename = elem.name;
            else
                elem.namespacename = namespacematch();
            //repo_.stack.push(elem);
            repo_.locations.Add(elem);
            if(!elem.type.Equals("namespace"))
            RepositoryForOutput.storageForOutput_.Add(elem);

            if (AAction.displaySemi)
            {
                Console.Write("\n  line# {0,-5}", repo_.semi.lineCount - 1);
                Console.Write("entering ");
                string indent = new string(' ', 2 * repo_.stack.count);
                Console.Write("{0}", indent);
                this.display(semi); // defined in abstract action
            }
            if (AAction.displayStack)
                repo_.stack.display();

        }
        private static void repositoryForTestUP()
        {
            Elem e = new Elem();
            e.type = "class";
            e.name = "karan";
            e.filename = "file1";
            e.namespacename = "xyz";
            RepositoryForOutput.storageForOutput_.Add(e);
            Elem e1 = new Elem();
            e1.type = "class";
            e1.name = "karan1";
            e1.filename = "file2";
            e1.namespacename = "xyz";
            RepositoryForOutput.storageForOutput_.Add(e1);

            ElemRelation er = new ElemRelation();
            er.relationType = "Aggregation";
            er.fromName = "Display";
            er.toName = "Xyz";
            RepositoryForRelation.storageForRelationship_.Add(er);
            ElemRelation er1 = new ElemRelation();
            er1.relationType = "Inheritance";
            er1.fromName = "Display";
            er1.toName = "Test";
            RepositoryForRelation.storageForRelationship_.Add(er1);
        }
        // ----------< Convert given String to XML and then Type Table List >------------ 
        public List<Elem> typeTableDecoding(string typeTableXML)
        {
            XDocument doc = XDocument.Parse(typeTableXML);
            var q = from x in
                        doc.Elements("TYPETABLE")
                    .Elements()
                    select x;

            List<Elem> typeTable = new List<Elem>();
            Elem el = null;
            int t = 0;
            foreach (var elem in q)
            {
                if (t == 0)
                {
                    el = new Elem();
                }
                if (elem.Name.ToString().Equals("Filename"))
                {
                    el.filename = elem.Value;
                    t++;
                }
                if (elem.Name.ToString().Equals("NamespaceName"))
                {
                    el.namespacename = elem.Value;
                    t++;
                }
                if (elem.Name.ToString().Equals("Type"))
                {
                    el.type = elem.Value;
                    t++;
                }
                if (elem.Name.ToString().Equals("TypeName"))
                {
                    el.name = elem.Value;
                    t++;
                }
                if (t == 4)
                {
                    typeTable.Add(el);
                    t = 0;
                }
            }
            return typeTable;
        }