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)); }
/// <summary> /// 初始化默认状态 /// </summary> private void InitDefaultState() { CurrentState = CreateState (StateId.Idle); StateRule = StateRule.GetInstance; //Debug.Log ("初始化默认状态为 " + CurrentState.ToString ()); }
/// <summary> /// 初始化默认状态 /// </summary> private void InitDefaultState() { CurrentState = CreateState(StateId.Idle); StateRule = StateRule.GetInstance; //Debug.Log ("初始化默认状态为 " + CurrentState.ToString ()); }