Thanks for you reply! In that case, it work. But it isn't enough. I consider a grammar:
select [ any character (an expr of an another app) ] from [ any character (an expr of an another app) ] //required where [ any character (an expr of an another app) ] //optional element order by [ any character (an expr of an another app) ] //optional element group by [ any character (an expr of an another app) ] //optional element limit [ any character (an expr of an another app) ] //optional element option [key1 = value1 [,key2 = value2 ...] ] //optional element, if any, require more then one key-value-pair for example: 1. SELECT *, INTERVAL(posted,NOW()-7*86400,NOW()-86400) AS timeseg, AVG(price) AS avgprice, COUNT(DISTINCT storeid), @ID, @weight from one , TWO, three where MATCH( '"test doc"/3'| '@@title hello' ) OPTION one = 1, two = 2 2. SELECT *, INTERVAL(posted,NOW()-7*86400,NOW()-86400) AS timeseg, AVG(price) AS avgprice, COUNT(DISTINCT storeid), @ID, @weight from one , TWO, three where MATCH( '"test doc"/3'| '@@title hello' ) order by timeseg DESC, @weight DESC group by @count limit 100 + @count OPTION three = 3, four = 4 I don't want to analyze those expressions, 'cause there's an another application will analyze those expressions. The point is I don't know how to get the "any character"s... Thanks a lot ! :-) THE POWER OF JAVA You get the error because 'SELECT' will match everything in the input till EOF greedily (because of .+) and obviously WS cannot match anything. When you use .+, you have to turn off greedy. Try something like: TEXT : SELECT ( options {greedy=false;} : . )* FROM This should work: grammar Test; r : TEXT { System.out.println( $TEXT.text ); } ; TEXT : SELECT ( options {greedy=false;} : . )* FROM { String str =$text; setText( str.substring(6, str.length()-4) ); } ; fragment SELECT : 'select' ; fragment FROM : 'from' ; Cheers, Indhu 陈凯成 wrote: Hi! I hava to intercept a expression between two string, and then send to another application. like a Java regex, for example: // ------------------------------------------------------------------------- // Java Code Begin // ------------------------------------------------------------------------- String regex = "select\\s+((.)+)\\s+from"; Pattern p = Pattern.complie(regex); Matcher m = p.matcher("select stu.id as 'Student ID', stu.name as 'Student Name' from"); String select = null; if(m.find()){ select = m.group(1); } System.out.println(select);// print [stu.id as 'Student ID', stu.name as 'Student Name'] send(select);// send to another application. // ------------------------------------------------------------------------- // Java Code End // ------------------------------------------------------------------------- I try to write a sample grammar file, but it dosen't works. // ------------------------------------------------------------------------- // Grammar File Begin // ------------------------------------------------------------------------- start : 'select' WS SELECT WS 'from'; SELECT : (.)+ { System.out.println(getText()); send(getText()); }; WS : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+; // ------------------------------------------------------------------------- // Grammar File End // ------------------------------------------------------------------------- I get a error message as follow when I generate code: // ------------------------------------------------------------------------- // Error Message Begin // ------------------------------------------------------------------------- [23:31:49] error(208): Sql.g:28:1: The following token definitions can never be matched because prior tokens match the same input: WS // ------------------------------------------------------------------------- // Message Begin // ------------------------------------------------------------------------- Thanks a lot! --------------------------------- THE POWER OF JAVA _________________________________________________________________ Windows Live™: Keep your life in sync. Check it out! http://windowslive.com/explore?ocid=TXT_TAGLM_WL_t1_allup_explore_012009 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address