Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
grammar s;

@lexer::members {
public class MyToken extends CommonToken {
    int x; // custom field
    public MyToken(CharStream input, int type, int channel,
                   int start, int stop)
    {
        super(input, type, channel, start, stop);
        x = 0;
    }
    public String toString() { return super.toString()+",x="+x; }
}

// override standard token emission
public Token emit() {
    MyToken t =
        new MyToken(input, state.type, state.channel,
                    state.tokenStartCharIndex, getCharIndex()-1);
    t.setLine(state.tokenStartLine);
    t.setText(state.text);
    t.setCharPositionInLine(state.tokenStartCharPositionInLine);
    t.x = 1;
    emit(t);
    return t;
}
}

a : 'int' ID (',' ID)* ';' ;
ID : 'a'..'z'+ ;INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;

...

Code Block
$ java org.antlr.Tool s.g
ANTLR Parser Generator  Version 3.0  1989-2007
$ javac Test.java
$ cat input
int a,b;
$ java Test input
Tokens: 
[@0,0:2='int',<7>,1:0],x=1
[@2,4:4='a',<4>,1:4],x=1
[@4,6:6='b',<4>,1:6],x=1
[@6,8:8='\n',<6>,channel=99,1:8],x=1