2008-10-14 3 views
0

문서 용 REST/Atom 서버를 쿼리하는 시스템이 있습니다. 쿼리는 GData에 의해 영감을 같이하고 있습니다 : 나는 문서의 유형이 실제로 쿼리를 수행하지 않고 반환됩니다 알 수있는 "BQ"매개 변수를 구문 분석 할 필요가Java에서 기본 검색어 (Google 데이터)를 구문 분석하려면 어떻게해야합니까?

http://server/base/feeds/documents?bq=[type in {'news'}] 

. 또는 AND (NO 구분) | 기본적으로

bq=[type = 'news']      -> return ["news"] 
bq=[type in {'news'}]     -> return ["news"] 
bq=[type in {'news', 'article'}]  -> return ["news", "article"] 
bq=[type = 'news']|[type = 'article'] -> return ["news", "article"] 
bq=[type = 'news']|[title = 'My Title'] -> return ["news"] 

, 그래서 예를 들면, 쿼리 언어와 함께 OR 될 수있다 술어의 목록 ("")입니다. 각 술어는 필드에 대한 제한 조건입니다. 제약 조건은 =, <,>, < =,> = 등이 될 수 있습니다. 여기에는 공백이있을 수 있습니다.

I 해요 등 정규 표현식, 있고 StringTokenizer, StreamTokenizer 사이에 손실 비트 ... 그리고 자바 1.4, 그래서 아무 파서와 함께 붙어 있어요 ...

누가 올바른 방향으로 날 지점 수 있습니까?

감사합니다.

답변

3

올바른 방법은 Antlr, JFlex 또는 JavaCC과 같은 파서 생성기를 사용하는 것입니다.

신속하고 더러운 방법은 다음과 같습니다

String[] disjunctedPredicateGroups = query.split("\|"); 
List<String[]> normalizedPredicates = ArrayList<String[]>; 
for (String conjunction : disjunctedPredicateGroups) { 
    normalizedPredicates.add(conjunction.split("\[|\]")); 
} 
// process each predicate 
관련 문제