2011-03-14 2 views
5

일부 언어의 유효성을 검사하기 위해 Java에서 Augmented Backus-Naur Form Parser (RFC 5234)가 필요합니다.자바 용 오픈 소스 ABNF 파서 구현?

휠을 다시 발명하지 않기 위해 이미 존재하는 ABNF 파서의 기존 오픈 소스 구현을 사용하는 것을 선호합니다.

필요에 따라 코드를 유지 관리 할 수 ​​있기 때문에 오픈 소스가 필요합니다.

존재하는 사람이 있습니까?

+0

유효성을 검사하려는 langauges에 이미 ABNF 사양이있는 경우이 방법을 사용하는 것이 좋습니다. 그렇지 않다면 많은 언어 정의가 이미 인코딩되고 테스트 된 파서 생성기 시스템을 찾아야합니다. 나는이 특별한 형식주의에서 많은 기존의 언어 정의를 발견하게되어 놀라실 것입니다. –

+1

@IraBaxter RFC822 (전자 메일), RFC2045 (MIME), RFC3501 (IMAP) ... 사실 모든 심각한 RFC는 ABNF에 있습니다. – djechlin

+0

@jechlin : 흥미 롭습니다. 얼마나 많은 구현체가 ABNF를 직접 사용합니까? –

답변

2

Parse2은 ABNF에서 파서 용 소스 Java를 생성합니다.

2

나는 Parse2 (랄프 의해 답변을 참조)이 일부 제한되어 있음을 관찰을 만들었습니다 :

  • aparse는 의견을 싫어하고 제거해야 할 세대에게
  • 모든 코드를 수동으로 이전 RFC 5234의 정의에 문 그래서 그들은 문법 그들에 근거하면 RFC에서
  • APAR을 복사 할 필요가
  • aparse은 "핵심"ABNF 규칙을 적용하지 않는 줄의 끝에서 ;로 끝나는 필요 se는 문법의 루프를 좋아하지 않는다. S --> NT1 NT2 T1 ; NT1 --> S | T2 ; ...) 무한 루프가 발생할 수 있습니다.

이러한 관찰은 Parse2의 개발자에 의해 확인되었습니다. 즉, Parse2는 ABNF 문법의 하위 집합을 구문 분석 할 수 있지만 기존 ABNF 문법을 찾아 소프트웨어에 제공하려고하면 문제가 발생할 가능성이 큽니다.

본인이 ABNF 문법을 직접 지정하고 이러한 제한을 염두에두면이 라이브러리가 도움이 될 것입니다. 기존 ABNF 문법을 사용해야하는 경우 코드 생성 전에 문법에 추가 작업을해야 할 수 있습니다.

추 신 : 컴파일 된 바이너리 (Java 바이트 코드)를 자유롭게 사용할 수 있더라도 현재 Parse2 라이브러리 소스 코드를 사용할 수 없습니다.

+0

은 ABNF 파서 생성기를 추가로 검색하여 [Java APG] [1] (GPL v2 + 라이브러리를 실행해야하는 코드 생성) 및 [abnf-parser-generator] [2] (생성 된 코드는 라이센스가 부여되지 않음)를 발견했습니다. 그래서 제가 알 수있는 최고의 Java 파서 생성기는 매우 강력하고 LR (1) [3] 파서를 생성 할 때 [abnf-parser-generator]입니다. [1] http://www.coasttocoastresearch.com/ [2] https://github.com/bqluan/abnf-parser-generator [3] http://en.wikipedia.org/wiki/ Canonical_LR_parser – Ray