internal object Parse( System.Xml.XmlNode node )
		{
            string name = node.Name;
            IParse o    = null;

            if (GetVariable("COMPILER_TOOL").ToUpper() == "RVDS" || GetVariable("COMPILER_TOOL").ToUpper() == "MDK")
            {
                if (name == "ScatterFile")          o = new Group();
                else if (name == "Set")             o = new Variable();
                else if (name == "Conditional")     o = new Conditional();
                else if (name == "If")              o = new Filter(false, true);
                else if (name == "IfDefined")       o = new Filter(true, true);
                else if (name == "IfNot")           o = new Filter(false, false);
                else if (name == "IfNotDefined")    o = new Filter(true, false);
                else if (name == "Match")           o = new MatchCondition();
                else if (name == "Or")              o = new OrCondition();
                else if (name == "And")             o = new AndCondition();
                else if (name == "Not")             o = new NotCondition();
                else if (name == "Positive")        o = new Group();
                else if (name == "Negative")        o = new Group();
                else if (name == "NamedGroup")      o = new NamedGroupRVDS();
                else if (name == "LoadRegion")      o = new LoadRegionRVDS();
                else if (name == "ExecRegion")      o = new ExecRegionRVDS();
                else if (name == "FileMapping")     o = new FileMappingRVDS();
                else if (name == "EntryPoint")      o = new EntryPointRVDS();
                else if (name == "GlobalVariable")  o = new GlobalVariableRVDS();
                else if (name == "Provide")         o = new ProvideRVDS();
                else if (name == "Include")         o = new Include();
                else if (name == "Error")           o = new Error();
            }
            else if (GetVariable("COMPILER_TOOL").ToUpper() == "GCC")
            {
                if (name == "ScatterFile") o = new Group();
                else if (name == "Set") o = new Variable();
                else if (name == "Conditional") o = new Conditional();
                else if (name == "If") o = new Filter(false, true);
                else if (name == "IfDefined") o = new Filter(true, true);
                else if (name == "IfNot") o = new Filter(false, false);
                else if (name == "IfNotDefined") o = new Filter(true, false);
                else if (name == "Match") o = new MatchCondition();
                else if (name == "Or") o = new OrCondition();
                else if (name == "And") o = new AndCondition();
                else if (name == "Not") o = new NotCondition();
                else if (name == "Positive") o = new Group();
                else if (name == "Negative") o = new Group();
                else if (name == "NamedGroup") o = new NamedGroupGCC();
                else if (name == "LoadRegion") o = new LoadRegionGCC();
                else if (name == "ExecRegion") o = new ExecRegionGCC();
                else if (name == "FileMapping") o = new FileMappingGCC();
                else if (name == "EntryPoint") o = new EntryPointGCC();
                else if (name == "GlobalVariable") o = new GlobalVariableGCC();
                else if (name == "Provide") o = new ProvideGCC();
                else if (name == "Include") o = new Include();
                else if (name == "Error") o = new Error();
            }
            else
            {
                throw new Exception("Environment Variable COMPILER_TOOL not set to a proper value. Supported compilers are ARM and GCC");
            }

            if(o != null)
            {
                o.Parse( this, node );
            }

			return o;
		}
        internal object Parse(System.Xml.XmlNode node)
        {
            string name = node.Name;
            IParse o    = null;

            if (GetVariable("COMPILER_TOOL").ToUpper() == "RVDS" || GetVariable("COMPILER_TOOL").ToUpper() == "MDK")
            {
                if (name == "ScatterFile")
                {
                    o = new Group();
                }
                else if (name == "Set")
                {
                    o = new Variable();
                }
                else if (name == "Conditional")
                {
                    o = new Conditional();
                }
                else if (name == "If")
                {
                    o = new Filter(false, true);
                }
                else if (name == "IfDefined")
                {
                    o = new Filter(true, true);
                }
                else if (name == "IfNot")
                {
                    o = new Filter(false, false);
                }
                else if (name == "IfNotDefined")
                {
                    o = new Filter(true, false);
                }
                else if (name == "Match")
                {
                    o = new MatchCondition();
                }
                else if (name == "Or")
                {
                    o = new OrCondition();
                }
                else if (name == "And")
                {
                    o = new AndCondition();
                }
                else if (name == "Not")
                {
                    o = new NotCondition();
                }
                else if (name == "Positive")
                {
                    o = new Group();
                }
                else if (name == "Negative")
                {
                    o = new Group();
                }
                else if (name == "NamedGroup")
                {
                    o = new NamedGroupRVDS();
                }
                else if (name == "LoadRegion")
                {
                    o = new LoadRegionRVDS();
                }
                else if (name == "ExecRegion")
                {
                    o = new ExecRegionRVDS();
                }
                else if (name == "FileMapping")
                {
                    o = new FileMappingRVDS();
                }
                else if (name == "EntryPoint")
                {
                    o = new EntryPointRVDS();
                }
                else if (name == "GlobalVariable")
                {
                    o = new GlobalVariableRVDS();
                }
                else if (name == "Provide")
                {
                    o = new ProvideRVDS();
                }
                else if (name == "Include")
                {
                    o = new Include();
                }
                else if (name == "Error")
                {
                    o = new Error();
                }
            }
            else if (GetVariable("COMPILER_TOOL").ToUpper() == "GCC")
            {
                if (name == "ScatterFile")
                {
                    o = new Group();
                }
                else if (name == "Set")
                {
                    o = new Variable();
                }
                else if (name == "Conditional")
                {
                    o = new Conditional();
                }
                else if (name == "If")
                {
                    o = new Filter(false, true);
                }
                else if (name == "IfDefined")
                {
                    o = new Filter(true, true);
                }
                else if (name == "IfNot")
                {
                    o = new Filter(false, false);
                }
                else if (name == "IfNotDefined")
                {
                    o = new Filter(true, false);
                }
                else if (name == "Match")
                {
                    o = new MatchCondition();
                }
                else if (name == "Or")
                {
                    o = new OrCondition();
                }
                else if (name == "And")
                {
                    o = new AndCondition();
                }
                else if (name == "Not")
                {
                    o = new NotCondition();
                }
                else if (name == "Positive")
                {
                    o = new Group();
                }
                else if (name == "Negative")
                {
                    o = new Group();
                }
                else if (name == "NamedGroup")
                {
                    o = new NamedGroupGCC();
                }
                else if (name == "LoadRegion")
                {
                    o = new LoadRegionGCC();
                }
                else if (name == "ExecRegion")
                {
                    o = new ExecRegionGCC();
                }
                else if (name == "FileMapping")
                {
                    o = new FileMappingGCC();
                }
                else if (name == "EntryPoint")
                {
                    o = new EntryPointGCC();
                }
                else if (name == "GlobalVariable")
                {
                    o = new GlobalVariableGCC();
                }
                else if (name == "Provide")
                {
                    o = new ProvideGCC();
                }
                else if (name == "Include")
                {
                    o = new Include();
                }
                else if (name == "Error")
                {
                    o = new Error();
                }
            }
            else
            {
                throw new Exception("Environment Variable COMPILER_TOOL not set to a proper value. Supported compilers are ARM and GCC");
            }

            if (o != null)
            {
                o.Parse(this, node);
            }

            return(o);
        }