[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