2014-07-17 3 views
2

Intelli IDEA/w Antlr 플러그인으로 작업합니다.Antlr4 문법 검사

mylang.abc이라는 파일을 작성한다고 가정 해 보겠습니다. 이것은 최종 lang이 어떻게 생겼는지에 대한 샘플입니다. 그런 다음이 언어의 문법과 함께 .g4 파일을 작성해야합니다.

그러나 내가 쓰는 문법이 정확한지 테스트하고 싶습니다. 이것은 antlr 미리보기에 의해 수행되지만 언어가 커짐에 따라 이상적인 소스 코드로 각 규칙을 테스트하고 트리를 체크해야합니다.

이상적인 테스트에는 논리가 있어야합니다. 소스 코드입니다 (이 줄을 선택적으로 구문 분석해야하는 규칙입니다). 이상적으로 파싱 된 트리 여야합니다. -> 테스트와 일치합니까? Ok/Oops를 인쇄하십시오.

내 접근법이 문법 테스트에서 맞습니까? 그렇다면 위의 예가 될 수있는 것은 무엇입니까?

답변

3

ANTLR v3의 경우 jUnit과 유사한 gUnit을 만들었습니다. 결국, 나는 다음과 같은 방법의 시리즈를 가지고만큼이나 쉬웠다 결정 : 문법과 세밀한 디테일에서 무엇이 잘못되었는지를 분리하는 방법 중 하나는

assertTreeEquals("a=b;", "expr", "(expr a = b)");

즉. 또 다른 접근법은 관심있는 모든 문구를 다룰 수있는 많은 정보를 간단히 입력하는 것입니다. 그런 다음 직렬화 된 트리가있는 텍스트 파일을 파서가 만든 트리와 비교할 수 있습니다. 일단이 나무에 만족하면 문법을 조정할 때 회귀를 쉽게 감지 할 수 있습니다.

반면에 Intellij 플러그인에서 자동화 된 메커니즘을 만들어 모든 규칙과 관련된 단위 테스트를 만드는 방법을 모색 중입니다. 다시 말해, 올바른 구문 분석 트리가 있는지 확인한 후에는 버튼을 클릭하면 각 구문/규칙 쌍마다 하나씩 일련의 단위 테스트가 자동으로 만들어집니다. 아직 입력 및 출력 오류로 가득 찬 디렉토리를 갖는 것보다 더 유용하다고 확신하지는 않지만 조사 할 것입니다.