2012-08-28 3 views
0

나는 이것이 이전에 끝났다고 확신한다. 나는 그것을 찾을 수 없다.문자열을 복합 부울로 구문 분석하기위한 재귀 논리?

"((OR OR) AND C) OR D"와 같은 속성을 데이터베이스 쿼리로 변환해야합니다. 특히 저는 Ruby Sequel을 사용하고 있습니다. 누구든지 바퀴를 재발 명하지 못하게하는 모범이나 유틸리티 또는 뭔가를 지적 할 수 있습니까?

+0

나무 꼭대기를보십시오 : http://treetop.rubyforge.org/ –

+0

감사합니다. 나는 기본적으로 내가 말한 것을 이미 수행 한 코드/의사 코드를 찾고 있었다. 우리는 여기에 3 명의 통신 수에 대해서만 이야기하고 있습니다. 나는 이것이 어딘가에 있다는 것을 확신한다. 이것은 끔찍한 특이한 일이 아닌 것 같다. 어쨌든, 우리는 서둘러 현재 우리는 현재 괄호에 묶여 있습니다 (현재 고객은없이 할 수 있습니다). AND 및 OR 처리는 단일 패스에서 문제가되지 않습니다. 나중에 다시 살펴보고 괄호를 구현합니다. – Huliax

답변

2

ANTLR을 사용하여 문법을 정의하고 해당 유형의 문자열에 대한 루비 파서를 자동으로 생성 할 수 있습니다. ANTLR은 파서 생성기이며 언어에 대한 문법 (예 : 설명 된 부울 언어)을 정의 할 수 있습니다.

구문 분석 후에 원하는 데이터 구조를 작성하기 위해 수행해야 할 작업 (쿼리의 구조를 캡처하는 트리 데이터 구조)을 지정할 수 있습니다.

ANTLR은 다른 언어의 파서도 생성 할 수 있으므로 특히 Ruby 문제는 아닙니다. 귀하의 경우에는 응용 프로그램에 통합하여 문자열을 구문 분석하고 필요한 데이터 구조를 생성 할 수있는 루비 파서를 생성합니다.

관련 문제