[antlr-interest] RE : Re: How can I ignore reserved words in certain cases ?

sergio at moredata.pt sergio at moredata.pt
Thu Nov 30 05:43:04 PST 2006


Hi,

I have the some problem on SQL grammar because the key words can be
identifiers like in the folowing example:

CREATE TABLE INDEX (
  FOREIGN INTEGER,
  KEY CHAR(10)
);

CREATE INDEX TABLE ON INDEX (FOREIGN);

Thanks
Sérgio Ferreira

> Hi,
>
>  Thanks for your help but that doesn't solve my problem. We have a hundred
> or so key words (such as print) declared in the lexer, all of which
> should be accepted as a STRING. We could always do as you suggested but
> we would have a parser rule several lines long and we would need to
> modify it whenever we added a new key word. Is there no way to simply
> ignore the key word tokens for certain rules?
>
>  Many thanks,
>  JC
>
>
> Micheal J <open.zone at virgin.net> a écrit :   Message
> Hi,
>
> I am writing a command line editor that has reserved words, such as
> "print", that should accept, at times, any string value. For example the
> following should be allowed:
>
> print hello
> print print
>
> The grammar is defined as follows:
>
>
>
> class ExprParser extends Parser;
>
> options {
>         k = 2;
>     buildAST=true;
> }
>
> expr: expr1;
>
> expr1: PRINT STRING;
>
> ==> expr: PRINT ( STRING | PRINT ) ;
>
>
>
>
>
> class ExprLexer extends Lexer;
>
> options {
>     k=2;
>     charVocabulary='\u0000'..'\u007F';
>     testLiterals = false;
> }
>
> tokens {
>         PRINT = "print";
> }
>
> STRING options { testLiterals = true; } : ('a'..'z')+;
>
> WS    : ( ' '
>         | '\r' '\n'
>         | '\n'
>         | '\t'
>         )
>         {$setType(Token.SKIP);}
>       ;
>
>
> Obviously the second example ("print print") does not work
>  because the
> token PRINT takes priority since we have testLiterals = true (note
>     that
> this example is taken from a more complex grammar).
>
> The    question is: how do I, under certain circumstances, ignore reserved
> word    tokens?
>
> Bythe way, I am currently using antlr 2.7.
>
>    ==> ANTLR2's latest version is 2.7.7
>
> Many    thanks,
> JC
>
>
>
>
>
> ---------------------------------
>    Yahoo! Mail réinvente le mail ! Découvrez le nouveau    Yahoo! Mail et
> son interface révolutionnaire.
>
>
> ---------------------------------
>  Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail et son
> interface révolutionnaire.




More information about the antlr-interest mailing list