Implements a parser for C++ header files.
Example #1
0
        static JObject RunParser(Configuration configuration)
        {
            // run boost::wave on the primary source file to get a preprocessed file and a list of macros
            var preprocessor = new Preprocessor(configuration);
            Console.WriteLine(preprocessor.Run());

            // before parsing, run some transformations on the preprocessed file to cut down on the size needed to be examined
            // this includes dropping any source that is not from the given primary or ancillary
            // sources, which is indicated in the preprocessed file by #line directives
            var source = preprocessor.Source;
            var rawSources = configuration.AdditionalHeaders.Concat(new[] { Path.Combine(Directory.GetCurrentDirectory(), source) });
            var relevantSources = new List<string>();
            foreach (string s in rawSources)
                relevantSources.Add(Environment.ExpandEnvironmentVariables(s));

            source = Path.ChangeExtension(source, ".i");
            Preprocessor.PostTransform(source, new HashSet<string>(relevantSources));

            // run the parser on the preprocessed file to generate a model of the file in memory
            var grammarFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "header_grammar.cgt");
            var parser = new HeaderParser(grammarFile);
            var root = parser.Parse(source).ToXml();
            var json = ModelXml.Transform(root);

            // add a dependency to the base SlimDX.json file
            json.Add(new JProperty("dependencies", new JArray(new JValue("../SlimDX/SlimDX.json"))));

            return json;
        }