2016-10-27 14 views
2

인터넷에서 사용 가능한 파서를 조금 보았지만 사용자 정의 표현에 가장 적합한 것이 무엇인지 이해하지 못했습니다. (ANTLR 내 요구에 헤비급 조금 보이지만, 그것은 단지 첫 인상이다) 내가 필요로하는 다음과 같은 표현이 잘 형성되어 있다는 검증 할 필요가간단한 사용자 정의 구문 분석기

:

IF (var1에> VAR2 15 IF (var3 < = var4; 1; 2)) 표현식은 다음과 같이 변환됩니다. 조건이 참이면 결과는 1535이고 다른 결과는입니다.

나는

+0

그래서 무엇이 문제입니까? –

+0

스프링의 SpEL 파서를 사용해 볼 수 있습니다 (** 연산자 **를 사용해야하는 경우 ** 대신 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/). expressions.html. ** ExpressionParser parser = new SpelExpressionParser()와 같이 간단합니다. 표현식 exp = parser.parseExpression ("1 + 2 * (2 + 7 * (1 + 5))"); System.out.println (exp.getValue()); ** 변수 및 기타 기능을 지원합니다. –

답변

1

첫째, 합니다 (IF 키워드는 IF를 등 중첩, 올바르게 사용되었는지하는 제 1 및 제 2 지점은 항상 있다는 것을, 불필요한 괄호)이 잘 형성되지 않는 것을 확인하기 만하면됩니다 문법을 작성하십시오. 그렇지 않으면 합법적인지 여부가 불분명 할 것입니다. (당신이 작성한 것은 정확하지 않습니다; 예를 들어 관계형 뒤에 숫자를 넣을 수 있습니까? 예를 들어 IF의 다른 부분으로 변수가 있습니까?) 문법에 따라 정확하게 구별됩니다.

두 번째로, 문법 만 수식을 받아들이는 경우 손으로 작성한 재귀 적 강하 문법 (see my SO answer on how to do this)으로 쉽게 코드를 작성할 수 있습니다. 그런 파서는 당신이 원하는 모든 온전한 검사를 할 것입니다.

매우 복잡한 언어를 구문 분석하려는 경우 JavaCC 또는 ANTLR을 선택하는 것이 좋습니다.