package de.unisiegen.gtitool.core.entities.regex; import java.util.ArrayList; import javax.swing.event.EventListenerList; import de.unisiegen.gtitool.core.entities.State; import de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener; import de.unisiegen.gtitool.core.parser.ParserOffset; import de.unisiegen.gtitool.core.parser.style.PrettyPrintable; import de.unisiegen.gtitool.core.parser.style.PrettyString; import de.unisiegen.gtitool.core.parser.style.PrettyToken; import de.unisiegen.gtitool.core.parser.style.Style; /** * A representation of an unfinished node, that stands for a Language from a * State s0 to a state s1 in the Convert DFA -> Regex algorithm */ public class UnfinishedNode extends LeafNode { /** * The serial version uid. */ private static final long serialVersionUID = 7119354254164008482L; /** * The k */ private int k; /** * The {@link EventListenerList}. */ private EventListenerList listenerList = new EventListenerList (); /** * The name */ private String name; /** * The offset of this {@link UnfinishedNode} in the source code. * * @see #getParserOffset() * @see #setParserOffset(ParserOffset) */ private ParserOffset parserOffset = NO_PARSER_OFFSET; /** * The position */ private int position; /** * */ private State s0; /** * The {@link State} s1 */ private State s1; /** * Creates a new {@link UnfinishedNode} * * @param s0 The {@link State} s0 * @param s1 The {@link State} s1 * @param k The k */ public UnfinishedNode ( State s0, State s1, int k ) { this.s0 = s0; this.s1 = s1; this.k = k; this.name = "L" + s0.getName () + s1.getName () + k; //$NON-NLS-1$ } /** * {@inheritDoc} * * @see PrettyPrintable#addPrettyStringChangedListener(de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener) */ public void addPrettyStringChangedListener ( PrettyStringChangedListener listener ) { this.listenerList.add ( PrettyStringChangedListener.class, listener ); } /** * {@inheritDoc} * * @see RegexNode#clone() */ @Override public RegexNode clone () { return new UnfinishedNode ( this.s0, this.s1, this.k ); } /** * {@inheritDoc} * * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo ( @SuppressWarnings ( "unused" ) RegexNode o ) { return 0; } /** * {@inheritDoc} * * @see RegexNode#equals(java.lang.Object) */ @Override public boolean equals ( Object o ) { if ( o == this ) { return true; } if ( o instanceof UnfinishedNode ) { return this.name.equals ( ( ( UnfinishedNode ) o ).getName () ); } return false; } /** * {@inheritDoc} * * @see RegexNode#getAllChildren() */ @Override public ArrayList < RegexNode > getAllChildren () { return new ArrayList < RegexNode > (); } /** * {@inheritDoc} * * @see RegexNode#getChildren() */ @Override public ArrayList < RegexNode > getChildren () { return new ArrayList < RegexNode > (); } /** * Returns the k. * * @return The k. * @see #k */ public int getK () { return this.k; } /** * {@inheritDoc} * * @see RegexNode#getLeftChildrenCount() */ @Override public int getLeftChildrenCount () { return 0; } /** * Returns the name. * * @return The name. * @see #name */ public String getName () { return this.name; } /** * {@inheritDoc} * * @see RegexNode#getNextUnfinishedNode() */ @Override public UnfinishedNode getNextUnfinishedNode () { return this; } /** * {@inheritDoc} * * @see RegexNode#getNodeString() */ @Override public PrettyString getNodeString () { PrettyString s = new PrettyString (); s.add ( new PrettyToken ( this.name, Style.REGEX_SYMBOL ) ); return s; } /** * {@inheritDoc} * * @see de.unisiegen.gtitool.core.entities.Entity#getParserOffset() */ public ParserOffset getParserOffset () { return this.parserOffset; } /** * {@inheritDoc} * * @see LeafNode#getPosition() */ @Override public int getPosition () { return this.position; } /** * {@inheritDoc} * * @see RegexNode#getRightChildrenCount() */ @Override public int getRightChildrenCount () { return 0; } /** * Returns the s0. * * @return The s0. * @see #s0 */ public State getS0 () { return this.s0; } /** * Returns the s1. * * @return The s1. * @see #s1 */ public State getS1 () { return this.s1; } /** * {@inheritDoc} * * @see RegexNode#isInCoreSyntax() */ @Override public boolean isInCoreSyntax () { return true; } /** * {@inheritDoc} * * @see RegexNode#nullable() */ @Override public boolean nullable () { return false; } /** * {@inheritDoc} * * @see PrettyPrintable#removePrettyStringChangedListener(de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener) */ public void removePrettyStringChangedListener ( PrettyStringChangedListener listener ) { this.listenerList.remove ( PrettyStringChangedListener.class, listener ); } /** * {@inheritDoc} * * @see de.unisiegen.gtitool.core.entities.Entity#setParserOffset(de.unisiegen.gtitool.core.parser.ParserOffset) */ public void setParserOffset ( ParserOffset parserOffset ) { this.parserOffset = parserOffset; } /** * {@inheritDoc} * * @see LeafNode#setPosition(int) */ @Override public void setPosition ( int p ) { this.position = p; } /** * {@inheritDoc} * * @see RegexNode#toCoreSyntax(boolean) */ @Override public RegexNode toCoreSyntax ( @SuppressWarnings ( "unused" ) boolean withCharacterClasses ) { return this; } /** * {@inheritDoc} * * @see RegexNode#toPrettyString() */ public PrettyString toPrettyString () { PrettyString s = new PrettyString (); s.add ( new PrettyToken ( this.name, Style.REGEX_SYMBOL ) ); return s; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString () { return "'" + this.name; //$NON-NLS-1$ } }