public DesignExtractor()
        {
            Statements    = ImplementationFactory.CreateStatementList();
            Variables     = ImplementationFactory.CreateVariableList();
            Procedures    = ImplementationFactory.CreateProcedureList();
            Constants     = ImplementationFactory.CreateConstantList();
            FollowsTable  = ImplementationFactory.CreateFollowsTable();
            ModifiesTable = ImplementationFactory.CreateModifiesTable();
            ParentTable   = ImplementationFactory.CreateParentTable();
            UsesTable     = ImplementationFactory.CreateUsesTable();
            CallsTable    = ImplementationFactory.CreateCallsTable();
            NextTable     = ImplementationFactory.CreateNextTable();
            AffectsTable  = ImplementationFactory.CreateAffectsTable();

            calls = new Dictionary <Procedure, List <Call> >();
        }
        public void LoadData(string programCode)
        {
            Lexer   lexer  = new Lexer(programCode);
            IParser parser = new Parser.Parser(lexer);
            AST     root   = parser.Parse();

            AbstractSyntaxTree = root;
            IDesignExtractor designExtractor = ImplementationFactory.CreateDesignExtractor();

            designExtractor.ExtractData(root);

            Variables     = designExtractor.Variables;
            Statements    = designExtractor.Statements;
            Procedures    = designExtractor.Procedures;
            Constants     = designExtractor.Constants;
            FollowsTable  = designExtractor.FollowsTable;
            ParentTable   = designExtractor.ParentTable;
            ModifiesTable = designExtractor.ModifiesTable;
            UsesTable     = designExtractor.UsesTable;
            CallsTable    = designExtractor.CallsTable;
            NextTable     = designExtractor.NextTable;
            AffectsTable  = designExtractor.AffectsTable;
        }