[antlr-interest] Antlr 3 beta 5
Terence Parr
parrt at cs.usfca.edu
Sun Jan 21 08:42:26 PST 2007
put IDENT last.
Ter
On Jan 21, 2007, at 8:05 AM, Miguel Ping wrote:
> Hi all!
>
> I am trying to use Antlr3 beta 5, and I am trying to develop a very
> primitive SQL parser. I am using antlr works to write up the
> grammar, and I can't even parse a simple query.
>
> Here is my grammar:
>
> ///------------------------------------------------
> grammar SQL;
>
> //@parser::header {package etc;}
> //@parseR::members {@SupressWarnings("all");}
>
> /*------------------------------------------------------------------
> * PARSER RULES
> *------------------------------------------------------------------*/
> startRule
> : sqlStatement (SEMI sqlStatement )* SEMI? EOF;
>
> sqlStatement
> : //sqlSchemaStatement
> sqlDataStatement ;
> // | sqlTransactionStatement ;
>
> sqlDataStatement
> : SELECT ASTERISK FROM IDENT;
> //@lexer::header{package etc;}
>
> /*------------------------------------------------------------------
> * LEXER RULES
> *------------------------------------------------------------------*/
>
>
> IDENT : (LETTER | UNDERS) (LETTER | UNDERS | DIGIT)*;
> fragment LETTER : 'a'..'z' | 'A'..'Z';
> fragment DIGIT : '0'..'9';
> fragment UNDERS : '_';
>
> LPAREN : '(';
> RPAREN : ')'; //characters SEMI :
> ';';
> COMMA : ',';
> DOT : '.';
> ASTERISK: '*';
>
> //SQL COMMANDS
> ORDER : 'order';
> GROUP : 'group';
> BY : 'by';
> HAVING : 'having';
> UNION : 'union';
> EXCEPT : 'except';
> INTERSECT: 'intersect'; ALL : 'all';
> FOR : 'for';
> IN : 'in';
>
> AND : 'and';
> NOT : 'not';
> NULL : 'null';
>
> SELECT : 'select';
> FROM : 'from';
> WHERE : 'where';
> AS : 'as';
> JOIN : 'join';
>
> PIVOT : 'pivot';
>
> COUNT : 'count';
> AVG : 'avg';
> MIN : 'min';
> MAX : 'max';
> SUM : 'sum';
> STDEV : 'stdev';
> STDEVP : 'stdevp';
> VAR : 'var';
> VARP : 'varp';
>
> DISTINCT: 'distinct';
> NATURAL : 'natural';
>
> LEFT : 'left';
> RIGHT : 'right';
> INNER : 'inner';
> OUTER : 'outer';
> FULL : 'full';
> ON : 'on';
> USING : 'using';
> LIMIT : 'limit';
> OFFSET : 'offset';
> DEFAULT : 'default';
>
> //common stuff
> WS : ( ' '
> | '\t'
> | '\r' '\n'
> | '\n'
> | '\r'
> ) {$channel=HIDDEN;};
> //ignore this token
> UINT : '0'..'9';//correct this later
> //comentarios
> ML_COMMENT
> : '/*' (options {greedy=false;} : .)* {$channel=HIDDEN;}'*/';
> ///------------------------------------------------
>
> If i try and interpret a simple
>
> select * from sailors
>
> query, antlr works gives me a 'MismatchedTokenException (8!=5)',
> altough this grammar is as simple as it gets! token 8 and 5 are the
> 'select' and 'ident' tokens, what am I doing wrong?
>
> I started doing a big piece of the grammar at one shot, and antlr3
> parser generation process gave me this error:
>
> error(10): internal error: org.antlr.misc.OrderedHashSet.size
> (OrderedHashSet.java:87): OrderedHashSet: elements and set size
> differs; 2097151!=1020508
>
> So I changed my approach and tried the supplied grammar, one step
> at a time. I have read and re-read the documentation, and I cannot
> find my problem.
>
> Thanks in advance, Miguel Ping
More information about the antlr-interest
mailing list