Entry point to parsing a BUILD file.

        Args:
          **global_args: Variables to include in the parsing environment.

def parse(self, **global_args):
        """Entry point to parsing a BUILD file.

        Args:
          **global_args: Variables to include in the parsing environment.
        """

        if self.build_file not in ParseContext._parsed:
            # http://en.wikipedia.org/wiki/Abstract_syntax_tree
            # http://martinfowler.com/books/dsl.html
            butcher_context = {}
            for str_to_exec in self._strs_to_exec:
                ast = compile(str_to_exec, '<string>', 'exec')
                exec_function(ast, butcher_context)

            with ParseContext.activate(self):
                startdir = os.path.abspath(os.curdir)
                try:
                    os.chdir(self.build_file.path_on_disk)
                    if self.build_file not in ParseContext._parsed:
                        ParseContext._parsed.add(self.build_file)
                        eval_globals = copy.copy(butcher_context)
                        eval_globals.update(
                            {'ROOT_DIR': self.build_file.path_on_disk,
                             '__file__': 'bogus please fix this'})
                        eval_globals.update(global_args)
                        exec_function(self.build_file.code, eval_globals)
                finally:
                    os.chdir(startdir)