Package pl.edu.amu.wmi.daut.re

Source Code of pl.edu.amu.wmi.daut.re.RangeNumberOfOccurrencesOperator$Factory

package pl.edu.amu.wmi.daut.re;

import java.util.List;
import pl.edu.amu.wmi.daut.base.AutomatonSpecification;
import pl.edu.amu.wmi.daut.base.NaiveAutomatonSpecification;
import pl.edu.amu.wmi.daut.base.EpsilonTransitionLabel;
import pl.edu.amu.wmi.daut.base.State;

/**
* Klasa reprezentujÄ…ca operator '{n,m}'.
*/
public class RangeNumberOfOccurrencesOperator extends UnaryRegexpOperator {
   /**
    * Zmienne dla ilosci wystapen wyrazenia.
    */
    private int max;
    private int min;

   /**
    * Konstruktor klasy.
    */
    public RangeNumberOfOccurrencesOperator(int n, int m) {
        this.max = m;
        this.min = n;
    }

   /**
    * Glowna metoda klasy.
    */
    public AutomatonSpecification createAutomatonFromOneAutomaton(
            AutomatonSpecification subautomaton) {

        AutomatonSpecification finalAutomaton = new NaiveAutomatonSpecification();
        if (this.min > this.max) {
            return finalAutomaton;
        } else {
            finalAutomaton = subautomaton.clone();
            if (this.min == 0) {
                finalAutomaton.markAsFinal(finalAutomaton.getInitialState());
                if (this.max == 0) {
                    for (State state : finalAutomaton.allStates()) {
                        finalAutomaton.unmarkAsFinalState(state);
                    }
                    finalAutomaton.markAsFinal(finalAutomaton.getInitialState());
                }
            }

            for (int i = 1; i < this.max; i++) {
                State newState = finalAutomaton.addState();

                for (State state : finalAutomaton.allStates()) {
                    if (finalAutomaton.isFinal(state)) {
                        finalAutomaton.addTransition(state, newState, new EpsilonTransitionLabel());
                        if (i < this.min)
                            finalAutomaton.unmarkAsFinalState(state);
                    }
                }
                finalAutomaton.insert(newState, subautomaton);
            }
        }
        return finalAutomaton;
    }

     /**
     * Fabryka operatora.
     */
    public static class Factory extends UnaryRegexpOperatorFactory {

        @Override
        public int numberOfParams() {
            return 2;
        }

        protected RegexpOperator doCreateOperator(List<String> params) {
            return new RangeNumberOfOccurrencesOperator(Integer.parseInt(params.get(0)),
                    Integer.parseInt(params.get(1)));
        }
    }

    /**
     * Metoda toString().
     */
    @Override
    public String toString() {
        return "RANGE_NUMBER_OF_OCCURRENCES_FROM_" + min + "_TO_" + max;
    }

};
TOP

Related Classes of pl.edu.amu.wmi.daut.re.RangeNumberOfOccurrencesOperator$Factory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.