[antlr-interest] Java out of Memeroy error On my grammor

屈汉图 qujiakang at hotmail.com
Tue Dec 15 18:26:59 PST 2009


Hello all :
    I recently want to make a sql complier to check sql syntax before send it to database,i write simple sql grammor for select statement list below:
SimpleSQL.g
grammar SimpleSQL;

options {
  language = Java;
}

start_rule
  :
  select_query
  ;

select_query
  :
  select ('UNION'('ALL'| 'DISTINCT')? select_query)?
  ;

select
  :
  'SELECT'('ALL' | 'DISTINCT')? select_list 
   from_clause (where_clause)? (group_clause)? (orderby_clause)?
  ;

orderby_clause
  :
  'ORDER' 'BY' order_by_exprs
  ;

order_by_exprs
  :
  order_by_expr (COMMA order_by_expr)*
  ;

order_by_expr
  :
  (
    identifier
    | (identifier DOT identifier)
  )
  (
    'ASC'
    | 'DESC'
  )?
  ;

where_clause
  :
  'WHERE' (search_conditions)
  ;

search_condition
  :condition_expr R (ATSIGN)? right_expr |condition_expr RN NULL 
 ;

search_conditions
  : 
  search_condition((AND|OR) search_condition)*
  ;

group_clause
  :
  'GROUP BY' (column (COMMA column)*) (having_clause)*
  ;

having_clause
  :
  'HAVING' (search_conditions)
  ;
ATSIGN:'@';
AND
  :
  'AND'
  ;

OR
  :
  'OR'
  ;

R
  :
  '='
  | '!='
  | '<'
  | '<='
  | '>'
  | '>='
  ;

RN
  :
  'IS'('NOT')?
  ;

NULL
  :
  'NULL'
  ;
condition_expr
  :
  column_elemnent
  ;
right_expr:
  RVALUE
  |condition_expr
;
parameters: ;

select_list
  :
  ASTERISK
  | column_elemnent (COMMA column_elemnent)*
  ;

column_elemnent
  :
  column
  | aggregate_function '(' column ')'
  ;

aggregate_function
  :
  'COUNT'
  | 'SUM'
  | 'MAX'
  | 'MIN'
  | 'AVG'
  ;

from_clause
  :
  'FROM' table_reference (COMMA table_reference)*
  ;

table_reference
  :
  column_alias
  |
  (
    column_alias
    (
      'INNER'
      | 'LEFT'
      | 'RIGHT'
    )?
    'JOIN' table_reference (correlation_name)? ('ON' search_conditions)
  )
  ;
column_alias:
  identifier (correlation_name)
;
table_schema
  :
  identifier
  ;
  
correlation_name
  :
   (AS)? identifier
  ;

column
  :
  identifier
  | identifier DOT identifier
  | identifier DOT ASTERISK
  ;

identifier
  :
  ID
  | '"' ( ~('"' ))* '"'
  ;
AS:'AS';

DOT
  :
  '.'
  ;
RVALUE:
 (
    'A'..'Z'
    | 'a'..'z'
    | '0'..'9'
    | '_'
    | '$'
    | '#'
 )*
;
ID
  :
  (
    'A'..'Z'
    | 'a'..'z'
  )
  (
    'A'..'Z'
    | 'a'..'z'
    | '0'..'9'
    | '_'
    | '$'
    | '#'
  )*
  | '"' ( ~('"' ))* '"'
  ;

ASTERISK
  :
  '*'
  ;

COMMA
  :
  ','
  ;
RPAREN
 : ')'
 ;
LPAREN
 : '('
 ;

while  i debug it in antlrworks (version 1.3.1) updated now ,after input test sql statement  like : SELECT * FROM city 
the output display : 
 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.util.Arrays.copyOf(Arrays.java:2760)
 at java.util.Arrays.copyOf(Arrays.java:2734)
 at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
 at java.util.ArrayList.add(ArrayList.java:351)
 at org.antlr.runtime.CommonTokenStream.fillBuffer(CommonTokenStream.java:116)
 at org.antlr.runtime.CommonTokenStream.LT(CommonTokenStream.java:238)
 at org.antlr.runtime.debug.DebugTokenStream.<init>(DebugTokenStream.java:45)
 at org.antlr.runtime.debug.DebugParser.<init>(DebugParser.java:52)
 at SimpleSQLParser.<init>(SimpleSQLParser.java:73)
 at __Test__.main(__Test__.java:12)

============================================
I lauch antlrworks with java -Xms32m -Xmx512m -jar antlrworks1.3.1.jar 
can anybody help !!!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20091216/f77ba32a/attachment.html 


More information about the antlr-interest mailing list