public static void ParseDiGraphToStateMachine(IGStateConfiguration gStateConfiguration = default)
        {
            const string pattern = @"\s*(?<State>.+?)\s*->\s*(?<NextState>.+?)\s*\[label\s*=\s*""(?<Trigger>[^""\]]+?)""\]";
            Regex        regex   = new Regex(pattern);
            //StringBuilder diGraphSB = new StringBuilder();
            //diGraph.ForEach(sc => {
            //    sc.GStateTransitions.ForEach(st => {
            //        diGraphSB.Append(st);
            //    });
            //});

            var diGraphStates = regex.Matches(string.Join(" ", gStateConfiguration.GDOTGraphStatements)).Cast <Match>()
                                .Select(x => (State: x.Groups["State"].Value, Trigger: x.Groups["Trigger"].Value,
                                              NextState: x.Groups["NextState"].Value, GuardPredicate: x.Groups["GuardPredicate"].Value));
            //var stateNames = diGraphStates.Select(x => x.State).Concat(diGraphStates.Select(x => x.NextState)).Distinct();
            //var triggerNames = diGraphStates.Select(x => x.Trigger).Distinct();
            //var transitionNames = diGraphStates.Select(x => (fromState: x.State,toState: x.NextState, trigger:x.Trigger).Distinct();
            var stateConfigurations = diGraphStates.Select(x =>
                                                           $"new StateConfiguration(state:State.{x.State},trigger:Trigger.{x.Trigger},nextState:State.{x.NextState}),");

            gStateConfiguration.GDiGraphStates.AddRange(diGraphStates);
            gStateConfiguration.GStateNames.AddRange(diGraphStates.Select(x => x.State).Concat(diGraphStates.Select(x => x.NextState)).Distinct());
            gStateConfiguration.GTriggerNames.AddRange(diGraphStates.Select(x => x.Trigger).Distinct());

            //return (stateNames, triggerNames, stateConfigurations);
        }
示例#2
0
 public GMethod(IGMethodDeclaration gDeclaration = default, IGBody gBody = default,
                IGComment gComment = default, bool isForInterface        = false,
                IGStateConfiguration gStateConfiguration = default)
 {
     GDeclaration        = gDeclaration == default ? new GMethodDeclaration() : gDeclaration;
     GBody               = gBody == default ? new GBody() : gBody;
     GComment            = gComment == default ? new GComment() : gComment;
     IsForInterface      = isForInterface;
     GStateConfiguration = gStateConfiguration == default ? new GStateConfiguration() : gStateConfiguration;
     Id = new GMethodId <TValue>();
 }