Package jflex.core

Class Macros


  • public final class Macros
    extends Object
    Symbol table and expander for macros.

    Maps macros to their (expanded) definitions, detects cycles and unused macros.

    Version:
    JFlex 1.8.1
    Author:
    Gerwin Klein
    • Constructor Detail

      • Macros

        public Macros()
        Creates a new macro expander.
    • Method Detail

      • insert

        public boolean insert​(String name,
                              RegExp definition)
        Stores a new macro and its definition.
        Parameters:
        name - the name of the new macro
        definition - the definition of the new macro
        Returns:
        true, iff the macro name has not been stored before.
      • markUsed

        public boolean markUsed​(String name)
        Marks a macro as used.
        Parameters:
        name - a String object.
        Returns:
        true, iff the macro name has been stored before.
      • isUsed

        public boolean isUsed​(String name)
        Tests if a macro has been used.
        Parameters:
        name - a String object.
        Returns:
        true, iff the macro has been used in a regular expression.
      • unused

        public List<String> unused()
        Returns all unused macros.
        Returns:
        the macro names that have not been used.
      • getDefinition

        public RegExp getDefinition​(String name)
        Fetches the definition of the macro with the specified name,

        The definition will either be the same as stored (expand() not called), or an equivalent one, that doesn't contain any macro usages (expand() called before).

        Parameters:
        name - the name of the macro
        Returns:
        the definition of the macro, null if no macro with the specified name has been stored.
        See Also:
        expand()
      • expand

        public void expand()
                    throws MacroException
        Expands all stored macros, so that getDefinition always returns a definition that doesn't contain any macro usages.
        Throws:
        MacroException - if there is a cycle in the macro usage graph.