/// <summary>
        ///    While There are more functions to parse
        /// </summary>
        /// <returns></returns>
        public TModule ParseFunctions2()
        {
            bool error_state = false;

            while (Current_Token == TOKEN.TOK_FUNCTION)
            {
                ProcedureBuilder b = ParseFunction2();
                Procedure        s = b.GetProcedure();

                //  if (s == null)
                //  {
                //      Console.WriteLine("Error While Parsing Functions");
                //       return null;
                //    }
                if (s != null)
                {
                    if (prog.IsCompiledFunction(s.Name))
                    {
                        Console.WriteLine("Warning : Duplicate function ....! " + s.Name);
                        throw new CParserException(-1, "Duplicate Function..", SaveIndex());
                    }

                    prog.Add(s);
                    GetNext();
                }
                else
                {
                    error_state = true;
                    while (GetNext() != TOKEN.TOK_FUNCTION)
                    {
                        if (Current_Token == TOKEN.ILLEGAL_TOKEN)
                        {
                            throw new CParserException(-100, "Compilation Error  ", SaveIndex());
                        }
                    }
                }
            }


            if (error_state == true)
            {
                throw new CParserException(-100, "Compilation Error  ", SaveIndex());
            }

            //
            //  Convert the builder into a program
            //
            return(prog.GetProgram());
        }