[antlr-interest] Re: identifier with space
lloyd_from_far
ld at galador.net
Tue Oct 28 20:12:56 PST 2003
sorry, my example was bad.
let parse this:
SELECT A Field With Name FROM ATable
SQL is case unsensitive.
I think I might have a solution with nongreedy subrule ...
let's investigate ...
--- In antlr-interest at yahoogroups.com, jbb at a... wrote:
>
> >The problem is, with this grammer the string
> >
> >"SELECT a field with name FROM aTable"
> >
> >will be cut in 2 tokens:
> >'SELECT'
> >'a field with name FROM aTable'
> >
> >where as I want 4:
> >'SELECT'
> >'a field with name'
> >'FROM'
> >'aTable'
> >
> >> I am sure I must be missing something obvious but why not use:
> >>
> >> IDENTIFIER:
> >> 'a' .. 'z' ( 'a' .. 'z' | '0' .. '9' | '_' | '$' | '#' | '.'
| ' ' )* ;
> >>
>
> I guess I am really dense tonite but I do not see the problem here.
>
> The 'F' in "FROM" is not a valid IDENTIFIER character.
>
> So I suppose you get 6 tokens here, assuming Upper-Case letters
> are recognized in some other lexer rule. (I guess, just like the
> "SELECT" is not recognized as an IDENTIFIER).
>
> the 6 tokens are (i think):
> 1) SELECT // recognized by the Upper-Case rule
> 2) a field with name // an IDENTIFIER
> 3) FROM // recognized by the Upper-Case rule
> 4) a // an IDENTIFIER
> 5) T // recognized by the Upper-Case rule
> 6) able // an IDENTIFIER
>
> and we can make it be the 4 you want by:
>
> IDENTIFIER:
> 'a' .. 'z' ( 'A' .. 'Z' | 'a' .. 'z' | '0' .. '9'
> | '_' | '$' | '#' | '.' | ' ' )* ;
>
> and I assume a lexer rule similar to:
>
> KEYWORD options { testLiterals=true; } :
> 'A' .. 'Z' ( 'A' .. 'Z' | 'a' .. 'z' | '0' .. '9'
> | '_' | '$' | '#' | '.' | ' ' )* ; // maybe not
these
>
> thus IDENTIFIERs begin with a lower case letter and KEYWORDs begin
> with an upper case letter.
>
> is that the way SQL works?
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list