private RuleDependencyProcessor.RuleRelations ExtractRuleRelations(ITypeMirror recognizer
                                                                           )
        {
            string serializedATN = GetSerializedATN(recognizer);

            if (serializedATN == null)
            {
                return(null);
            }
            ATN atn = ATNSimulator.Deserialize(serializedATN.ToCharArray());

            RuleDependencyProcessor.RuleRelations relations = new RuleDependencyProcessor.RuleRelations
                                                                  (atn.ruleToStartState.Length);
            foreach (ATNState state in atn.states)
            {
                if (!state.epsilonOnlyTransitions)
                {
                    continue;
                }
                foreach (Transition transition in state.GetTransitions())
                {
                    if (transition.TransitionType != TransitionType.Rule)
                    {
                        continue;
                    }
                    RuleTransition ruleTransition = (RuleTransition)transition;
                    relations.AddRuleInvocation(state.ruleIndex, ruleTransition.target.ruleIndex);
                }
            }
            return(relations);
        }
Пример #2
0
        /// <summary>reset the parser's state</summary>
        public virtual void Reset()
        {
            if (((ITokenStream)InputStream) != null)
            {
                ((ITokenStream)InputStream).Seek(0);
            }
            _errHandler.Reset(this);
            _ctx          = null;
            _syntaxErrors = 0;
            Trace         = false;
            _precedenceStack.Clear();
            _precedenceStack.Add(0);
            ATNSimulator interpreter = Interpreter;

            if (interpreter != null)
            {
                interpreter.Reset();
            }
        }
Пример #3
0
        protected ParserFactory getParserFactory(string lexerName, string parserName, string listenerName, string entryPoint)
        {
            Assembly loader        = Assembly.LoadFile(Path.Combine(tmpdir, "Parser.dll"));
            Type     lexerClass    = loader.GetType(lexerName);
            Type     parserClass   = loader.GetType(parserName);
            Type     listenerClass = loader.GetType(listenerName);

            ConstructorInfo lexerCtor  = lexerClass.GetConstructor(new Type[] { typeof(ICharStream) });
            ConstructorInfo parserCtor = parserClass.GetConstructor(new Type[] { typeof(ITokenStream) });

            // construct initial instances of the lexer and parser to deserialize their ATNs
            ITokenSource tokenSource = (ITokenSource)lexerCtor.Invoke(new object[] { new AntlrInputStream("") });

            parserCtor.Invoke(new object[] { new CommonTokenStream(tokenSource) });

            if (!REUSE_LEXER_DFA)
            {
                FieldInfo lexerSerializedATNField = lexerClass.GetField("_serializedATN");
                string    lexerSerializedATN      = (string)lexerSerializedATNField.GetValue(null);
                for (int i = 0; i < NUMBER_OF_THREADS; i++)
                {
                    sharedLexerATNs[i] = ATNSimulator.Deserialize(lexerSerializedATN.ToCharArray());
                }
            }

            if (RUN_PARSER && !REUSE_PARSER_DFA)
            {
                FieldInfo parserSerializedATNField = parserClass.GetField("_serializedATN");
                string    parserSerializedATN      = (string)parserSerializedATNField.GetValue(null);
                for (int i = 0; i < NUMBER_OF_THREADS; i++)
                {
                    sharedParserATNs[i] = ATNSimulator.Deserialize(parserSerializedATN.ToCharArray());
                }
            }

            return(new ParserFactory_1(listenerClass, parserClass, lexerCtor, parserCtor, entryPoint));
        }