Пример #1
0
 private Alternative ParseAlternative()
 {
     var alt = new Alternative();
     var first = new HashSet<TokenType>()
     {
         TokenType.CHAR,
         TokenType.OPENCLASS,
         TokenType.OPENGROUP,
     };
     while (first.Contains(_ts.Peek().Type))
     {
         alt.Factors.Add(ParseMatchOp());
     }
     return alt;
 }
Пример #2
0
 public NFAGraph(Alternative alt)
 {
     InstantiateFromAlternative(alt);
 }
Пример #3
0
        private void InstantiateFromAlternative(Alternative alt)
        {
            _startState = NewState();
            _finishState.Add(NewState());
            var curtail = _startState;
            foreach (var mf in alt.Factors)
            {
                var mfnfa = new NFAGraph(mf);
                CopyInto(mfnfa);

                var nl = new NFALink();
                nl.IsEmpty = true;
                nl.Target = mfnfa._startState;
                _adjList[curtail].Add(nl);
                curtail = mfnfa._finishState.Single();
            }
            var nel = new NFALink();
            nel.IsEmpty = true;
            nel.Target = _finishState.Single();
            _adjList[curtail].Add(nel);
        }