CharAlphabet.cs
36 lines
| 1.0 KiB
| text/x-csharp
|
CSharpLexer
|
|
r165 | using System.Collections.Generic; | ||
|
|
r164 | using System.Linq; | ||
|
|
r165 | using Implab.Automaton; | ||
|
|
r228 | using System; | ||
|
|
r164 | |||
|
|
r165 | namespace Implab.Formats { | ||
|
|
r164 | public class CharAlphabet: IndexedAlphabetBase<char> { | ||
| public override int GetSymbolIndex(char symbol) { | ||||
| return symbol; | ||||
| } | ||||
|
|
r176 | public IEnumerable<char> InputSymbols { | ||
|
|
r164 | get { return Enumerable.Range(char.MinValue, char.MaxValue).Cast<char>(); } | ||
| } | ||||
|
|
r228 | |||
| public CharMap CreateCharMap() { | ||||
| var map = new Dictionary<int, int>(); | ||||
| int max = 0, min = char.MaxValue; | ||||
| foreach (var p in Mappings) { | ||||
| var index = GetSymbolIndex(p.Key); | ||||
| max = Math.Max(max, index); | ||||
| min = Math.Min(min, index); | ||||
| map[index] = p.Value; | ||||
| } | ||||
| var result = new int[max - min + 1]; | ||||
| for (int i = 0; i < result.Length; i++) | ||||
| map.TryGetValue(min + i, out result[i]); | ||||
| return new CharMap((char)min, result); | ||||
| } | ||||
|
|
r164 | } | ||
| } | ||||
