comparison Implab/Automaton/DFATable.cs @ 236:302ca905c19e v2

JsonReader optimizations
author cin
date Tue, 21 Nov 2017 14:57:58 +0300
parents 5f7a3e1d32b9
children fa6cbf4d8841
comparison
equal deleted inserted replaced
235:b49969a7043c 236:302ca905c19e
114 public int[,] CreateTransitionTable() { 114 public int[,] CreateTransitionTable() {
115 var table = new int[StateCount,AlphabetSize]; 115 var table = new int[StateCount,AlphabetSize];
116 116
117 for (int i = 0; i < StateCount; i++) 117 for (int i = 0; i < StateCount; i++)
118 for (int j = 0; j < AlphabetSize; j++) 118 for (int j = 0; j < AlphabetSize; j++)
119 table[i, j] = AutomatonConst.UNREACHABLE_STATE; 119 table[i, j] = AutomatonConst.UnreachableState;
120 120
121 foreach (var t in this) 121 foreach (var t in this)
122 table[t.s1,t.edge] = (byte)t.s2; 122 table[t.s1,t.edge] = (byte)t.s2;
123 123
124 return table; 124 return table;
288 // специальное значение, тогда сохраним минимальный класс, 288 // специальное значение, тогда сохраним минимальный класс,
289 // содержащий этот символ на томже месте. 289 // содержащий этот символ на томже месте.
290 290
291 var nextCls = 0; 291 var nextCls = 0;
292 foreach (var item in minClasses) { 292 foreach (var item in minClasses) {
293 if (nextCls == AutomatonConst.UNCLASSIFIED_INPUT) 293 if (nextCls == AutomatonConst.UnclassifiedInput)
294 nextCls++; 294 nextCls++;
295 295
296 // сохраняем DFAConst.UNCLASSIFIED_INPUT 296 // сохраняем DFAConst.UNCLASSIFIED_INPUT
297 var cls = item.Contains(AutomatonConst.UNCLASSIFIED_INPUT) ? AutomatonConst.UNCLASSIFIED_INPUT : nextCls++; 297 var cls = item.Contains(AutomatonConst.UnclassifiedInput) ? AutomatonConst.UnclassifiedInput : nextCls++;
298 optimalDFA.AddSymbol(cls); 298 optimalDFA.AddSymbol(cls);
299 299
300 foreach (var a in item) 300 foreach (var a in item)
301 alphabetMap[a] = cls; 301 alphabetMap[a] = cls;
302 } 302 }
324 324
325 foreach (var t in m_transitions) 325 foreach (var t in m_transitions)
326 data.Add(String.Format( 326 data.Add(String.Format(
327 "{0} -> {2} [label={1}];", 327 "{0} -> {2} [label={1}];",
328 String.Join("", stateAlphabet.GetSymbols(t.s1)), 328 String.Join("", stateAlphabet.GetSymbols(t.s1)),
329 ToLiteral(ToLiteral(String.Join("", t.edge == AutomatonConst.UNCLASSIFIED_INPUT ? new [] { "@" } : inputAlphabet.GetSymbols(t.edge).Select(x => x.ToString())))), 329 ToLiteral(ToLiteral(String.Join("", t.edge == AutomatonConst.UnclassifiedInput ? new [] { "@" } : inputAlphabet.GetSymbols(t.edge).Select(x => x.ToString())))),
330 String.Join("", stateAlphabet.GetSymbols(t.s2)) 330 String.Join("", stateAlphabet.GetSymbols(t.s2))
331 )); 331 ));
332 data.Add("}"); 332 data.Add("}");
333 return String.Join("\n", data); 333 return String.Join("\n", data);
334 } 334 }