comparison Implab/Parsing/DFABuilder.cs @ 158:130781364799 v2

refactoring, code cleanup
author cin
date Thu, 18 Feb 2016 14:34:02 +0300
parents 97fbbf816844
children
comparison
equal deleted inserted replaced
157:948c015a9011 158:130781364799
1 using Implab; 1 using Implab;
2 using System; 2 using System;
3 using System.Collections.Generic; 3 using System.Collections.Generic;
4 using System.Diagnostics; 4 using System.Diagnostics;
5 using System.Linq; 5 using System.Linq;
6 using System.Text;
7 using System.Threading.Tasks;
8 6
9 namespace Implab.Parsing { 7 namespace Implab.Parsing {
10 /// <summary> 8 /// <summary>
11 /// Используется для построения ДКА по регулярному выражению, сначала обходит 9 /// Используется для построения ДКА по регулярному выражению, сначала обходит
12 /// регулярное выражение и вычисляет followpos, затем используется метод 10 /// регулярное выражение и вычисляет followpos, затем используется метод
116 114
117 public void Visit(EndToken token) { 115 public void Visit(EndToken token) {
118 if (m_root == null) 116 if (m_root == null)
119 m_root = token; 117 m_root = token;
120 m_idx++; 118 m_idx++;
121 m_indexes[m_idx] = Alphabet.UNCLASSIFIED; 119 m_indexes[m_idx] = IndexedAlphabetBase<char>.UNCLASSIFIED;
122 m_firstpos = new HashSet<int>(new[] { m_idx }); 120 m_firstpos = new HashSet<int>(new[] { m_idx });
123 m_lastpos = new HashSet<int>(new[] { m_idx }); 121 m_lastpos = new HashSet<int>(new[] { m_idx });
124 Followpos(m_idx); 122 Followpos(m_idx);
125 m_ends.Add(m_idx, token.Tag); 123 m_ends.Add(m_idx, token.Tag);
126 } 124 }
132 (x, y) => x.SetEquals(y), 130 (x, y) => x.SetEquals(y),
133 (x) => x.Sum(n => n.GetHashCode()) 131 (x) => x.Sum(n => n.GetHashCode())
134 )); 132 ));
135 133
136 stateMap[m_firstpos] = DefineState( dfa, m_firstpos); 134 stateMap[m_firstpos] = DefineState( dfa, m_firstpos);
137 Debug.Assert(stateMap[m_firstpos] == DFADefinitionBase.INITIAL_STATE); 135 Debug.Assert(stateMap[m_firstpos] == DFADefinition.INITIAL_STATE);
138 136
139 var queue = new Queue<HashSet<int>>(); 137 var queue = new Queue<HashSet<int>>();
140 138
141 queue.Enqueue(m_firstpos); 139 queue.Enqueue(m_firstpos);
142 140