@@ -160,8 +160,12 namespace Implab { | |||
|
160 | 160 | |
|
161 | 161 | if (slot < RESERVED_HANDLERS_COUNT) { |
|
162 | 162 | |
|
163 | if (slot == 0) | |
|
164 |
|
|
|
163 | if (slot == 0) { | |
|
164 | m_handlers = new THandler[RESERVED_HANDLERS_COUNT]; | |
|
165 | } else { | |
|
166 | while (m_handlers == null) | |
|
167 | Thread.MemoryBarrier(); | |
|
168 | } | |
|
165 | 169 | |
|
166 | 170 | m_handlers[slot] = handler; |
|
167 | 171 |
@@ -11,10 +11,8 | |||
|
11 | 11 | } |
|
12 | 12 | |
|
13 | 13 | public CDFADefinition Optimize() { |
|
14 | var optimized = new CDFADefinition(new CharAlphabet()); | |
|
15 | 14 | |
|
16 | Optimize(optimized, m_alphabet, optimized.Alphabet); | |
|
17 | return optimized; | |
|
15 | return (CDFADefinition)Optimize(alphabet => new CDFADefinition((CharAlphabet)alphabet), m_alphabet, new CharAlphabet()); | |
|
18 | 16 | } |
|
19 | 17 | |
|
20 | 18 | public void PrintDFA() { |
@@ -66,8 +66,8 namespace Implab.Parsing { | |||
|
66 | 66 | m_states[s1].transitions[symbol] = s2; |
|
67 | 67 | } |
|
68 | 68 | |
|
69 |
p |
|
|
70 |
Safe.ArgumentNotNull( |
|
|
69 | protected IDFADefinition Optimize<TA>(Func<IAlphabet<TA>, IDFADefinition> dfaFactory,IAlphabet<TA> sourceAlphabet, IAlphabet<TA> minimalAlphabet) { | |
|
70 | Safe.ArgumentNotNull(dfaFactory, "dfaFactory"); | |
|
71 | 71 | Safe.ArgumentNotNull(minimalAlphabet, "minimalAlphabet"); |
|
72 | 72 | |
|
73 | 73 | var setComparer = new CustomEqualityComparer<HashSet<int>>( |
@@ -211,6 +211,8 namespace Implab.Parsing { | |||
|
211 | 211 | |
|
212 | 212 | // построение автомата |
|
213 | 213 | |
|
214 | var minimalDFA = dfaFactory(minimalAlphabet); | |
|
215 | ||
|
214 | 216 | var states = new int[ optimalMap.Length ]; |
|
215 | 217 | states[0] = UNREACHEBLE_STATE; |
|
216 | 218 | |
@@ -237,6 +239,7 namespace Implab.Parsing { | |||
|
237 | 239 | } |
|
238 | 240 | } |
|
239 | 241 | |
|
242 | return minimalDFA; | |
|
240 | 243 | } |
|
241 | 244 | |
|
242 | 245 | public void PrintDFA<TA>(IAlphabet<TA> alphabet) { |
@@ -18,10 +18,8 namespace Implab.Parsing { | |||
|
18 | 18 | } |
|
19 | 19 | |
|
20 | 20 | public EDFADefinition<T> Optimize() { |
|
21 | var optimized = new EDFADefinition<T>(new EnumAlphabet<T>()); | |
|
22 | Optimize(optimized, m_alphabet, optimized.Alphabet); | |
|
23 | 21 | |
|
24 | return optimized; | |
|
22 | return (EDFADefinition<T>)Optimize(alphabet => new EDFADefinition<T>((EnumAlphabet<T>)alphabet), m_alphabet, new EnumAlphabet<T>()); | |
|
25 | 23 | } |
|
26 | 24 | |
|
27 | 25 | public void PrintDFA() { |
General Comments 0
You need to be logged in to leave comments.
Login now