示例#1
0
 public PreprocessorLineLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#2
0
        protected void parseSources(ParserFactory factory, IEnumerable <InputDescriptor> sources)
        {
            Stopwatch startTime = Stopwatch.StartNew();

            Thread.VolatileWrite(ref tokenCount, 0);
            int sourceCount = 0;
            int inputSize   = 0;

#if NET40PLUS
            BlockingCollection <int> threadIdentifiers = new BlockingCollection <int>();
            for (int i = 0; i < NUMBER_OF_THREADS; i++)
            {
                threadIdentifiers.Add(i);
            }

            ICollection <Task <int> > results             = new List <Task <int> >();
            QueuedTaskScheduler       executorServiceHost = new QueuedTaskScheduler(NUMBER_OF_THREADS);
            TaskScheduler             executorService     = executorServiceHost.ActivateNewQueue();
#else
            ICollection <Func <int> > results = new List <Func <int> >();
#endif
            foreach (InputDescriptor inputDescriptor in sources)
            {
                ICharStream input = inputDescriptor.GetInputStream();
                sourceCount++;
                input.Seek(0);
                inputSize += input.Size;
#if NET40PLUS
                Task <int> futureChecksum = Task.Factory.StartNew <int>(new Callable_1(input, factory, threadIdentifiers).call, CancellationToken.None, TaskCreationOptions.None, executorService);
#else
                Func <int> futureChecksum = new Callable_1(input, factory).call;
#endif
                results.Add(futureChecksum);
            }

            Checksum checksum = new CRC32();
            foreach (var future in results)
            {
#if NET40PLUS
                int value = future.Result;
#else
                int value = future();
#endif
                if (COMPUTE_CHECKSUM)
                {
                    updateChecksum(checksum, value);
                }
            }

#if NET40PLUS
            executorServiceHost.Dispose();
#endif

            Console.Out.WriteLine("Total parse time for {0} files ({1} KB, {2} tokens, checksum 0x{3:X8}): {4}ms",
                                  sourceCount,
                                  inputSize / 1024,
                                  Thread.VolatileRead(ref tokenCount),
                                  COMPUTE_CHECKSUM ? checksum.Value : 0,
                                  startTime.ElapsedMilliseconds);

            if (sharedLexers.Length > 0)
            {
                Lexer             lexer            = sharedLexers[0];
                LexerATNSimulator lexerInterpreter = lexer.Interpreter;
                DFA[]             modeToDFA        = lexerInterpreter.atn.modeToDFA;
                if (SHOW_DFA_STATE_STATS)
                {
                    int states  = 0;
                    int configs = 0;
                    HashSet <ATNConfig> uniqueConfigs = new HashSet <ATNConfig>();

                    for (int i = 0; i < modeToDFA.Length; i++)
                    {
                        DFA dfa = modeToDFA[i];
                        if (dfa == null || dfa.states == null)
                        {
                            continue;
                        }

                        states += dfa.states.Count;
                        foreach (DFAState state in dfa.states.Values)
                        {
                            configs += state.configs.Count;
                            uniqueConfigs.UnionWith(state.configs);
                        }
                    }

                    Console.Out.WriteLine("There are {0} lexer DFAState instances, {1} configs ({2} unique), {3} prediction contexts.", states, configs, uniqueConfigs.Count, lexerInterpreter.atn.ContextCacheSize);
                }
            }

            if (RUN_PARSER && sharedParsers.Length > 0)
            {
                Parser parser = sharedParsers[0];
                // make sure the individual DFAState objects actually have unique ATNConfig arrays
                ParserATNSimulator interpreter = parser.Interpreter;
                DFA[] decisionToDFA            = interpreter.atn.decisionToDFA;

                if (SHOW_DFA_STATE_STATS)
                {
                    int states  = 0;
                    int configs = 0;
                    HashSet <ATNConfig> uniqueConfigs = new HashSet <ATNConfig>();

                    for (int i = 0; i < decisionToDFA.Length; i++)
                    {
                        DFA dfa = decisionToDFA[i];
                        if (dfa == null || dfa.states == null)
                        {
                            continue;
                        }

                        states += dfa.states.Count;
                        foreach (DFAState state in dfa.states.Values)
                        {
                            configs += state.configs.Count;
                            uniqueConfigs.UnionWith(state.configs);
                        }
                    }

                    Console.Out.WriteLine("There are {0} parser DFAState instances, {1} configs ({2} unique), {3} prediction contexts.", states, configs, uniqueConfigs.Count, interpreter.atn.ContextCacheSize);
                }

                int   localDfaCount      = 0;
                int   globalDfaCount     = 0;
                int   localConfigCount   = 0;
                int   globalConfigCount  = 0;
                int[] contextsInDFAState = new int[0];

                for (int i = 0; i < decisionToDFA.Length; i++)
                {
                    DFA dfa = decisionToDFA[i];
                    if (dfa == null || dfa.states == null)
                    {
                        continue;
                    }

                    if (SHOW_CONFIG_STATS)
                    {
                        foreach (DFAState state in dfa.states.Keys)
                        {
                            if (state.configs.Count >= contextsInDFAState.Length)
                            {
                                Array.Resize(ref contextsInDFAState, state.configs.Count + 1);
                            }

                            if (state.IsAcceptState)
                            {
                                bool hasGlobal = false;
                                foreach (ATNConfig config in state.configs)
                                {
                                    if (config.ReachesIntoOuterContext)
                                    {
                                        globalConfigCount++;
                                        hasGlobal = true;
                                    }
                                    else
                                    {
                                        localConfigCount++;
                                    }
                                }

                                if (hasGlobal)
                                {
                                    globalDfaCount++;
                                }
                                else
                                {
                                    localDfaCount++;
                                }
                            }

                            contextsInDFAState[state.configs.Count]++;
                        }
                    }

                    if (EXPORT_LARGEST_CONFIG_CONTEXTS)
                    {
                        foreach (DFAState state in dfa.states.Keys)
                        {
                            foreach (ATNConfig config in state.configs)
                            {
                                string configOutput = config.ToDotString();
                                if (configOutput.Length <= configOutputSize)
                                {
                                    continue;
                                }

                                configOutputSize = configOutput.Length;
                                writeFile(tmpdir, "d" + dfa.decision + ".s" + state.stateNumber + ".a" + config.Alt + ".config.dot", configOutput);
                            }
                        }
                    }
                }

                if (SHOW_CONFIG_STATS && currentPass == 0)
                {
                    Console.Out.WriteLine("  DFA accept states: {0} total, {1} with only local context, {2} with a global context", localDfaCount + globalDfaCount, localDfaCount, globalDfaCount);
                    Console.Out.WriteLine("  Config stats: {0} total, {1} local, {2} global", localConfigCount + globalConfigCount, localConfigCount, globalConfigCount);
                    if (SHOW_DFA_STATE_STATS)
                    {
                        for (int i = 0; i < contextsInDFAState.Length; i++)
                        {
                            if (contextsInDFAState[i] != 0)
                            {
                                Console.Out.WriteLine("  {0} configs = {1}", i, contextsInDFAState[i]);
                            }
                        }
                    }
                }
            }
        }
示例#3
0
 public MnemonicLexer(ICharStream input, TextWriter output, TextWriter errorOutput)
     : base(input, output, errorOutput)
 {
     Interpreter = new LexerATNSimulator(this, _ATN, decisionToDFA, sharedContextCache);
 }
示例#4
0
 public DotNetIlTypeNameLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#5
0
 public LowLevelAssemblyLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#6
0
 public LexerProyecto(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#7
0
 public LeftRecursionGrammarLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#8
0
 public calcExprLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#9
0
 public DensityExpressionGrammarLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
 public AbstractIfStmtLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#11
0
 public InsurancePolicyRulesLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#12
0
 public CustomLanguageLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#13
0
 public AbcNotationLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
 public PropositionalLogicGrammarLexer(ICharStream input, TextWriter output, TextWriter errorOutput)
     : base(input, output, errorOutput)
 {
     Interpreter = new LexerATNSimulator(this, _ATN, decisionToDFA, sharedContextCache);
 }
示例#15
0
 public RecycleLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#16
0
 public KittenGrammarLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
 public SymbolicStringsLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#18
0
 public MarkdownPreprocessorLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#19
0
 public DDD_layout_scriptLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#20
0
 public BinShredLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#21
0
 public CommandToolLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#22
0
 public RabotoraScriptFormatLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#23
0
 public MessageScriptLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
 public NumberRangesLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
 public SICLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#26
0
 public PreposeGesturesLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }
示例#27
0
 public LSLLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN, decisionToDFA, sharedContextCache);
 }
示例#28
0
 public XPathLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN, null, null);
 }
示例#29
0
 public CSScriptLexer(ICharStream input)
     : base(input)
 {
     Interpreter = new LexerATNSimulator(this, _ATN);
 }
示例#30
0
 public TagExpressionLexer(ICharStream input)
     : base(input)
 {
     _interp = new LexerATNSimulator(this, _ATN);
 }