##// END OF EJS Templates
fixed promise chaining behavior, the error handler doesn't handle result or cancellation handlers exceptions these exceptions are propagated to the next handlers.
fixed promise chaining behavior, the error handler doesn't handle result or cancellation handlers exceptions these exceptions are propagated to the next handlers.

File last commit:

r178:d5c5db0335ee ref20160224
r196:40d7fed4a09e default
Show More
RegularExpressionVisitorT.cs
37 lines | 1.2 KiB | text/x-csharp | CSharpLexer
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();
}
}
}