Mercurial > pub > ImplabNet
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 |