public static State CreateState(Grammar grammar, State previousState, Symbol symbolFollowed, string name)
        {
            var rules = new List <StateRule>();

            var rulesToAdvance = previousState.Rules.Where(r => r.RightSide.Count > r.DotIndex && r.RightSide[r.DotIndex].Name == symbolFollowed.Name);

            var advancedRules = new List <StateRule>();

            foreach (var ruleToAdvance in rulesToAdvance)
            {
                var advancedRule = StateRule.CreateFromRule(ruleToAdvance);
                advancedRule.DotIndex = ruleToAdvance.DotIndex + 1;

                advancedRules.Add(advancedRule);
            }

            rules.AddRange(advancedRules);

            GetRulesOfSymbolsAfterDot(grammar, rules);
            //rules.AddRange(rulesWithSymbolAfterDotOnLeftSide.Select(StateRule.CreateFromRule));

            return(new State(name, rules));
        }
Exemplo n.º 2
0
 /// <summary>
 /// 初始化默认状态
 /// </summary>
 private void InitDefaultState()
 {
     CurrentState = CreateState (StateId.Idle);
     StateRule = StateRule.GetInstance;
     //Debug.Log ("初始化默认状态为 " + CurrentState.ToString ());
 }
Exemplo n.º 3
0
 /// <summary>
 /// 初始化默认状态
 /// </summary>
 private void InitDefaultState()
 {
     CurrentState = CreateState(StateId.Idle);
     StateRule    = StateRule.GetInstance;
     //Debug.Log ("初始化默认状态为 " + CurrentState.ToString ());
 }