コード例 #1
0
ファイル: Concatenation.cs プロジェクト: Hainv201/ALE2
        public override List <Transition> GetAutomaton(ref int i, ref List <Transition> ListTransitions, ref List <State> ListStates, ref List <Alphabet> ListAlphabets)
        {
            List <Transition> transitions_got_by_parsing_concatenation   = new List <Transition>();
            List <Transition> transitions_got_by_parsing_leftexpression  = Left_Expression.GetAutomaton(ref i, ref ListTransitions, ref ListStates, ref ListAlphabets);
            List <Transition> transitions_got_by_parsing_rightexpression = Right_Expression.GetAutomaton(ref i, ref ListTransitions, ref ListStates, ref ListAlphabets);
            State             final_left = transitions_got_by_parsing_leftexpression.Find(x => x.GetRightState().IsFinal).GetRightState();

            final_left.IsFinal = false;
            State             initial_right = transitions_got_by_parsing_rightexpression.Find(x => x.GetLeftState().IsInitial).GetLeftState();
            List <Transition> transitions_contain_initial_right = transitions_got_by_parsing_rightexpression.FindAll(x => x.GetLeftState() == initial_right);

            foreach (Transition transition in transitions_contain_initial_right)
            {
                transition.SetLeftState(final_left);
            }
            ListStates.Remove(initial_right);
            transitions_got_by_parsing_concatenation.AddRange(transitions_got_by_parsing_leftexpression);
            transitions_got_by_parsing_concatenation.AddRange(transitions_got_by_parsing_rightexpression);
            return(transitions_got_by_parsing_concatenation);
        }
コード例 #2
0
ファイル: Choice.cs プロジェクト: Hainv201/ALE2
        public override List <Transition> GetAutomaton(ref int i, ref List <Transition> ListTransitions, ref List <State> ListStates, ref List <Alphabet> ListAlphabets)
        {
            List <Transition> transitions_got_by_parsing_choice = new List <Transition>();
            State             initial = new State($"S{i}");

            i++;
            ListStates.Add(initial);
            List <Transition> transitions_got_by_parsing_leftexpression  = Left_Expression.GetAutomaton(ref i, ref ListTransitions, ref ListStates, ref ListAlphabets);
            List <Transition> transitions_got_by_parsing_rightexpression = Right_Expression.GetAutomaton(ref i, ref ListTransitions, ref ListStates, ref ListAlphabets);
            State             final = new State($"S{i}");

            i++;
            ListStates.Add(final);

            State left_left  = transitions_got_by_parsing_leftexpression.Find(x => x.GetLeftState().IsInitial).GetLeftState();
            State right_left = transitions_got_by_parsing_leftexpression.Find(x => x.GetRightState().IsFinal).GetRightState();

            State left_right  = transitions_got_by_parsing_rightexpression.Find(x => x.GetLeftState().IsInitial).GetLeftState();
            State right_right = transitions_got_by_parsing_rightexpression.Find(x => x.GetRightState().IsFinal).GetRightState();

            initial.IsInitial    = true;
            final.IsFinal        = true;
            left_left.IsInitial  = false;
            right_left.IsFinal   = false;
            left_right.IsInitial = false;
            right_right.IsFinal  = false;

            Transition transition1 = new Transition("_", null);

            transition1.SetLeftState(initial);
            transition1.SetRightState(left_left);
            transitions_got_by_parsing_choice.Add(transition1);
            ListTransitions.Add(transition1);

            Transition transition2 = new Transition("_", null);

            transition2.SetLeftState(initial);
            transition2.SetRightState(left_right);
            transitions_got_by_parsing_choice.Add(transition2);
            ListTransitions.Add(transition2);

            transitions_got_by_parsing_choice.AddRange(transitions_got_by_parsing_leftexpression);
            transitions_got_by_parsing_choice.AddRange(transitions_got_by_parsing_rightexpression);

            Transition transition3 = new Transition("_", null);

            transition3.SetLeftState(right_left);
            transition3.SetRightState(final);
            transitions_got_by_parsing_choice.Add(transition3);
            ListTransitions.Add(transition3);

            Transition transition4 = new Transition("_", null);

            transition4.SetLeftState(right_right);
            transition4.SetRightState(final);
            transitions_got_by_parsing_choice.Add(transition4);
            ListTransitions.Add(transition4);


            return(transitions_got_by_parsing_choice);
        }