2011-10-19 7 views
3

응용 프로그램의 경우 산술 표현식과 변수를 사용하여 String을 구문 분석하려고합니다. 다음 문자열을 상상해보십시오 :자리 표시자를 사용하여 라이브러리를 파싱하는 간단한 자바 재귀 적 내림

((A + B) * C)/(D - (E * F)) 

그래서 여기에는 실제 정수/이중 값이 없습니다. 첫 번째 자리 표시자를 가져 와서 자리 표시 자에 값을 넣고 (예를 들어 데이터베이스 쿼리를 통해) 다음 자리 표시자를 계속 진행할 수있는 라이브러리를 찾고 있습니다.

그래서 본질적으로 사용자가 원하는 것은 변수의 실제 값을 모른 채 도메인 언어로 문자열을 쓸 수있게하려는 것입니다. 따라서 응용 프로그램은 일부 "상황 별 논리"에 따라 숫자 값을 제공하고 계산 결과를 출력합니다.

Google 검색 결과 적절한 라이브러리를 찾지 못했습니다. 나는 ANTLR을 찾았지만 나의 유스 케이스에 대해 "헤비급"이라고 생각한다. 어떤 제안?

+1

예, 사용하기 쉬운 경량의 솔루션이 있습니다. http://jparsec.codehaus.org/ (하지만 Java에서 고유 한 파싱 연결자 세트를 구현하는 것은 매우 간단합니다). –

답변

2

당신은 ANTLR이 약간의 잔인 함을 알고 있습니다. 그러나 중위 표기법으로 산술 식을 구문 분석하는 것은 어렵지 않아, 참조 : Algorithms for Parsing Arithmetic Expressions

+0

javascript 방식으로 내 요구 사항을 성공적으로 구현했습니다. 감사! –

0

당신이 원하는 것은 단순한 표현식이고 그 표현식에 대한 문법을 ​​미리 알고 있다면 라이브러리가 필요하지 않습니다. 이 코드를 pure Java로 쉽게 코딩 할 수 있습니다.

의 자세한 버전이 답변을 참조하십시오 방법 : Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

는 몇 모나드 또는 이항 연산자의 형태로 항상 경우 사용자는, 그들의 자신의 표현 언어를 정의하는 경우, 그들은 수 우선 순위를 지정하면 몇 가지 우선 순위 수준에서 연산자 목록을 사용하여 파서를 매개 변수화하여 위의 대답을 구부릴 수 있습니다.

언어가 더 복잡한 경우 metacompilers을 조사 할 수 있습니다.