[antlr-interest] Can lexer rules return values?

Steve Bennett stevagewp at gmail.com
Fri Feb 15 23:29:07 PST 2008


I was sure I read something about lexer fragment rules being able to
return values, but it doesn't seem to work. My rule:

fragment EXTENSION_TAG_OPEN returns [boolean selfclose=false]:
    LT EXTENSION_NAME (SPACE* ATTR)? SPACE* (SLASH {$selfclose=true;})? GT
  ;


The errors:

[18:19:31] C:\antlr\mediawiki11intransitLexer.java:3262: cannot return
a value from method whose result type is void
[18:19:31]             mLT(); if (failed) return selfclose;

etc.

The generated code:
    // $ANTLR start EXTENSION_TAG_OPEN
    public final void mEXTENSION_TAG_OPEN() throws RecognitionException {
        boolean selfclose = false;

        try {
            // C:\\antlr\\mediawiki11intransit.g:1157:62: ( LT
EXTENSION_NAME ( ( SPACE )* ATTR )? ( SPACE )* ( SLASH )? GT )
            // C:\\antlr\\mediawiki11intransit.g:1158:5: LT
EXTENSION_NAME ( ( SPACE )* ATTR )? ( SPACE )* ( SLASH )? GT
            {
            mLT(); if (failed) return selfclose;

etc.

Am I doing something wrong?

Steve


More information about the antlr-interest mailing list