[antlr-interest] Inherit grammar and specify base scanner class at the same time

Stanimir Stamenkov stanio at myrealbox.com
Wed Jan 25 01:05:27 PST 2006


/Stanimir Stamenkov/:

> I've first tried 
> specifying the scanner class on the super grammar as:
> 
> class SuperLexer extends Lexer("name.stanio.MyScanner");
> 
> but the generated "MyLexer" was direct subclass of |antlr.CharScanner|

I can't manage to make it whatever I'm trying. :-1  I run:

antlr superlexer.g
antlr -glib superlexer.g mylexer.g

The generated "SuperLexer.java" extends |name.stanio.MyScanner| but 
"MyLexer.java" extends |antlr.CharScanner|, and if I specify:

class MyLexer extends SuperLexer("name.stanio.MyScanner");

the ANTLR tool reports an error. Could someone point me if it is a 
FAQ or well documented feature as I haven't been able to find more 
info on it.

-- 
Stanimir
-------------- next part --------------
/*
 *
 */

class SuperLexer extends Lexer("name.stanio.MyScanner");

WS : ( ' ' | '\t' | '\f' | '\r' | '\n' )+;
-------------- next part --------------
/*
 *
 */
header
{
package name.stanio;
}

class MyLexer extends SuperLexer; //("name.stanio.MyScanner");

COMMENT : "//" (~('\n'|'\r'))* ('\n'|'\r'('\n')?) { myFancyMethod(); };
-------------- next part --------------
package name.stanio;

import antlr.CharScanner;
import antlr.LexerSharedInputState;

public abstract class MyScanner extends CharScanner {

    public MyScanner(LexerSharedInputState inputState) {
        super(inputState);
    }
    
    protected void myFancyMethod() {
    	  System.out.println("Say \"Hi\"!");
    }

}


More information about the antlr-interest mailing list