antlrantlr3

How to match a string, but case-insensitively?


Let's say that I want to match "beer", but don't care about case sensitivity.

Currently I am defining a token to be ('b'|'B' 'e'|'E' 'e'|'E' 'r'|'R') but I have a lot of such and don't really want to handle 'verilythisisaverylongtokenindeedomyyesitis'.

The antlr wiki seems to suggest that it can't be done (in antlr) ... but I just wondered if anyone had some clever tricks ...


Solution

  • How about define a lexer token for each permissible identifier character, then construct the parser token as a series of those?

    beer: B E E R;
    
    A : 'A'|'a';
    B: 'B'|'b';
    

    etc.