示例#1
0
        /// <summary>
        /// Loads a MIB file.
        /// </summary>
        public static IEnumerable <IModule> Compile(Stream stream, List <CompilerError> errors, List <CompilerWarning> warnings)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            var watch = new System.Diagnostics.Stopwatch();

            watch.Start();
            var lexer  = new SmiLexer(new ANTLRInputStream(stream));
            var tokens = new CommonTokenStream(lexer);
            var parser = new SmiParser(tokens);

            try
            {
                var doc = parser.GetDocument(string.Empty);
#if !MA
                Logger.Info(watch.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) + "-ms used to parse");
#endif
                watch.Stop();
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return(doc.Modules.OfType <IModule>().ToList());
            }
            catch (RecognitionException ex)
            {
                errors.Add(new CompilerError(ex));
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return(new IModule[0]);
            }
        }
示例#2
0
        /// <summary>
        /// Loads a MIB file.
        /// </summary>
        /// <param name="fileName">File name.</param>
        /// <param name="errors">Errors.</param>
        public static IEnumerable <IModule> Compile(string fileName, List <CompilerError> errors, List <CompilerWarning> warnings)
        {
            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }

            if (fileName.Length == 0)
            {
                throw new ArgumentException("fileName cannot be empty");
            }

            if (!File.Exists(fileName))
            {
                throw new ArgumentException("file does not exist: " + fileName);
            }

            var watch = new System.Diagnostics.Stopwatch();

            watch.Start();
            var lexer  = new SmiLexer(new ANTLRFileStream(fileName));
            var tokens = new CommonTokenStream(lexer);
            var parser = new SmiParser(tokens);

            try
            {
                var doc = parser.GetDocument(fileName);
#if !MA
                Logger.Info(watch.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) + "-ms used to parse " +
                            fileName);
#endif
                watch.Stop();
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return(doc.Modules.OfType <IModule>());
            }
            catch (RecognitionException ex)
            {
                errors.Add(new CompilerError(ex)
                {
                    FileName = fileName
                });
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return(new IModule[0]);
            }
        }
示例#3
0
        /// <summary>
        /// Loads a MIB file.
        /// </summary>
        /// <param name="fileName">File name.</param>
        /// <param name="errors">Errors.</param>
        public static IEnumerable<IModule> Compile(string fileName, List<CompilerError> errors, List<CompilerWarning> warnings)
        {
            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }

            if (fileName.Length == 0)
            {
                throw new ArgumentException("fileName cannot be empty");
            }

            if (!File.Exists(fileName))
            {
                throw new ArgumentException("file does not exist: " + fileName);
            }

            var watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            var lexer = new SmiLexer(new ANTLRFileStream(fileName));
            var tokens = new CommonTokenStream(lexer);
            var parser = new SmiParser(tokens);
            try
            {
                var doc = parser.GetDocument(fileName);
#if !MA && !MT
                Logger.Info(watch.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) + "-ms used to parse " +
                            fileName);
#endif
                watch.Stop();
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return doc.Modules.OfType<IModule>();
            }
            catch (RecognitionException ex)
            {
                errors.Add(new CompilerError(ex, fileName));
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return new IModule[0];
            }
        }
示例#4
0
        /// <summary>
        /// Loads a MIB file.
        /// </summary>
        public static IEnumerable<IModule> Compile(Stream stream, List<CompilerError> errors, List<CompilerWarning> warnings)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            var watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            var lexer = new SmiLexer(new ANTLRInputStream(stream));
            var tokens = new CommonTokenStream(lexer);
            var parser = new SmiParser(tokens);
            try
            {
                var doc = parser.GetDocument(string.Empty);
#if !MA && !MT
                Logger.Info(watch.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) + "-ms used to parse");
#endif
                watch.Stop();
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return doc.Modules.OfType<IModule>().ToList();
            }
            catch (RecognitionException ex)
            {
                errors.Add(new CompilerError(ex, null));
                errors.AddRange(parser.Errors);
                warnings.AddRange(parser.Warnings);
                return new IModule[0];
            }
        }