Interface FiniteAlphabet

  • All Superinterfaces:
    Alphabet, Annotatable, Changeable
    All Known Implementing Classes:
    AbstractAlphabet, IntegerAlphabet.SubIntegerAlphabet, SimpleAlphabet, SingletonAlphabet, SoftMaskedAlphabet

    public interface FiniteAlphabet
    extends Alphabet
    An alphabet over a finite set of Symbols.

    This interface makes the distinction between an alphabet over a finite (and possibly small) number of symbols and an Alphabet over an infinite (or extremely large) set of symbols. Within a FiniteAlphabet, the == operator should be sufficient to decide upon equality for all AtomicSymbol instances.

    The alphabet functions as the repository of objects in the fly-weight design pattern. Only symbols within an alphabet should appear in object that claim to use the alphabet - otherwise something is in error.

    Author:
    Matthew Pocock
    • Method Detail

      • size

        int size()
        The number of symbols in the alphabet.
        Returns:
        the size of the alphabet
      • iterator

        java.util.Iterator<Symbol> iterator()
        Retrieve an Iterator over the AtomicSymbols in this FiniteAlphabet.

        Each AtomicSymbol as for which this.contains(as) is true will be returned exactly once by this iterator in no specified order.

        Returns:
        an Iterator over the contained AtomicSymbol objects
      • addSymbol

        void addSymbol​(Symbol s)
                throws IllegalSymbolException,
                       ChangeVetoException
        Adds a symbol to this alphabet.

        If the symbol matches more than one AtomicSymbol, then each symbol matching it will be added.

        Parameters:
        s - the Symbol to add
        Throws:
        IllegalSymbolException - if the symbol is null, or if for any reason it can't be added
        ChangeVetoException - if either the alphabet doesn't allow symbols to be added, or the change was vetoed
      • removeSymbol

        void removeSymbol​(Symbol s)
                   throws IllegalSymbolException,
                          ChangeVetoException
        Remove a symbol from this alphabet.

        If the symbol matches multiple AtomicSymbols, then each matching symbol it will be removed.

        Parameters:
        s - the Symbol to removeintGot
        Throws:
        IllegalSymbolException - if the symbol is null, or if for any reason it can't be removed
        ChangeVetoException - if either the alphabet doesn't allow symbols to be added, or the change was vetoed