View Javadoc

    1   package org.codehaus.groovy.syntax.lexer;
    2
    3   import org.codehaus.groovy.syntax.ReadException;
    4   import org.codehaus.groovy.syntax.Token;
    5
    6   /***
    7    *  The minimal interface provided by all Lexers.
    8    *
    9    *  @author Bob Mcwhirter
    10   *  @author James Strachan
    11   *  @author John Wilson
    12   *  @author Chris Poirier
    13   */
    14
    15  public interface Lexer
    16  {
    17
    18
    19     /***
    20      *  Gets the lexer that is actually doing the <code>nextToken()</code>
    21      *  work, if it isn't us.
    22      */
    23
    24      public Lexer getDelegate();
    25
    26
    27
    28     /***
    29      *  Gets the lexer from which this lexer is obtaining characters.
    30      */
    31
    32      public Lexer getSource();
    33
    34
    35
    36     /***
    37      *  Finds and returns (consuming) the next token from the underlying stream.
    38      *  Returns null when out of tokens.
    39      */
    40
    41      public Token nextToken() throws ReadException, LexerException;
    42
    43
    44
    45
    46    //---------------------------------------------------------------------------
    47    // DELEGATION
    48
    49
    50     /***
    51      *  Resets a lexer for reuse.
    52      */
    53
    54      public void reset();
    55
    56
    57
    58     /***
    59      *  Delegates our duties to another Lexer.
    60      */
    61
    62      public void delegate( Lexer to );
    63
    64
    65
    66     /***
    67      *  Retakes responsibility for our duties.
    68      */
    69
    70      public void undelegate();
    71
    72
    73
    74     /***
    75      *  Returns true if we are delegated.
    76      */
    77
    78      public boolean isDelegated();
    79
    80
    81
    82     /***
    83      *  Sets the source lexer.
    84      */
    85
    86      public void setSource( Lexer source );
    87
    88
    89
    90     /***
    91      *  Unsets the source lexer.
    92      */
    93
    94      public void unsetSource( );
    95
    96
    97
    98     /***
    99      *  Returns true if we have an external source.
    100     */
    101
    102     public boolean isExternallySourced();
    103
    104
    105
    106
    107   //---------------------------------------------------------------------------
    108   // STREAM ROUTINES
    109
    110
    111    /***
    112     *  Returns the current line number.
    113     */
    114
    115     public int getLine();
    116
    117
    118
    119    /***
    120     *  Returns the current column on that line.
    121     */
    122
    123     public int getColumn();
    124
    125
    126
    127
    128    /***
    129     *  Returns the next character, without consuming it.
    130     */
    131
    132     public char la() throws LexerException, ReadException;
    133
    134
    135
    136    /***
    137     *  Returns the next <code>k</code>th character, without consuming any.
    138     */
    139
    140     public char la(int k) throws LexerException, ReadException;
    141
    142
    143
    144    /***
    145     *  Eats a single character from the input stream.
    146     */
    147
    148     public char consume() throws LexerException, ReadException;
    149
    150
    151 }