Mercurial > pub > ImplabNet
view Implab/Automaton/RegularExpressions/RegularExpressionVisitorT.cs @ 203:4d9830a9bbb8 v2
Added 'Fail' method to RunnableComponent which allows component to move from
Running to Failed state.
Added PollingComponent a timer based runnable component
More tests
Added FailPromise a thin class to wrap exceptions
Fixed error handling in SuccessPromise classes.
author | cin |
---|---|
date | Tue, 18 Oct 2016 17:49:54 +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(); } } }