Mercurial > pub > ImplabNet
view Implab/Automaton/RegularExpressions/RegularExpressionVisitorT.cs @ 221:8808383fcb94 v2
fixed recursion in Safe.Dispose with IEnumerable
author | cin |
---|---|
date | Fri, 23 Jun 2017 01:03:42 +0300 |
parents | d5c5db0335ee |
children |
line wrap: on
line source
using Implab; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace Implab.Automaton.RegularExpressions { /// <summary> /// </summary> public class RegularExpressionVisitor<TTag> : RegularExpressionVisitor { readonly Dictionary<int, TTag> m_tags = new Dictionary<int, TTag>(); readonly ITaggedDFABuilder<TTag> m_builder; public RegularExpressionVisitor(ITaggedDFABuilder<TTag> builder) : base(builder) { m_builder = builder; } public override void Visit(EndToken token) { base.Visit(token); var tagged = token as EndToken<TTag>; if (tagged != null) m_tags.Add(Index, tagged.Tag); } protected override void MarkFinalState(HashSet<int> state) { base.MarkFinalState(state); m_builder.SetStateTag(Translate(state), GetStateTags(state)); } TTag[] GetStateTags(IEnumerable<int> state) { Debug.Assert(state != null); return state.Where(m_tags.ContainsKey).Select(pos => m_tags[pos]).ToArray(); } } }