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 |
