2011-04-13 4 views
3

JML을 읽을 수있는 Java로 작성된 파서를 찾고 있습니다.JML 용 간단한 파서

기본적으로 파서가 JML 블록을 읽고 어떤 메소드에 속해 있는지 알고 싶습니다.

저는 OpenJML 프로젝트를보고 있었지만 프로젝트 설정이 너무 많습니다.

답변

3

나는 당신이 원하는 것을 정확하게하거나 심지어 원하는 것에 가까운 도구를 발견 할 것입니다.

//@ .../*@ ... @*/의 입력 파일을 직접 검색하여 메소드 선언이 바로 뒤에 오는 "부분적인"Java 문법을 작성할 수 있습니다. "partial"은 입력 소스를 의미 론적으로 파싱하지 않지만 어휘 수준에서만 수행한다는 것을 의미합니다 (토큰 만). 문자열 리터럴을 고려해야합니다. String s = "/*@"; 문자가 JML 사양의 시작이되기를 원하지 않을 것입니다. 자바에 대한

두 잘 알려진 파서 생성기는 다음과 같습니다

  1. ANTLR
  2. JavaCC

는 그립에 도착 둘 중 하나는 새로운 것, 특히, 시간이 조금 걸릴 것입니다 파서 생성기를 사용할 수는 있지만 일단 파문이 생기면이 작업을 안정적으로 수행 할 수있는 작은 문법을 작성하는 것은별로 어렵지 않습니다.

+0

생각이 재미 있지만, 파서 생성에 대해 배울 시간이 없습니다. 나는 RegEx의 몇 가지 질문에 대해 의견을 개진 할 수 있다고 생각합니다. –

+0

정규식으로 사용하면 신뢰할 수 없습니다. 유효한 JML 사양을 문자열 리터럴 (' ".../* @ ..."')과 내부 주석 ('// ... @ */...') 안에있는 것과 구별 할 수 없습니다. . –

+0

위의 예제는 결코 발생하지 않을 수 있지만 여러 개의'//'또는'/ * ... * /'를 사용하여 많은 코드가 주석 처리 될 때마다 정규 표현식은 여전히 ​​내부의 JML 사양과 일치합니다 그 블록들. 간단히 말해서 : 정규 표현식이 트릭을 수행 할 수도 있지만 결코 "생산 가치있는"솔루션 인 IMO가 될 수 없습니다 (그리고 나는 정규식 애호가입니다!). –