2011-10-29 3 views
2

많은 파일 형식을 처리해야합니다. 적어도 50, 어쩌면 100 이상.대형 프로젝트를위한 파싱 기술 선택

나는 Antlr과 함께 과거에 놀았습니다. 그러나, 나는 ANTLR은 몇 가지 이유로이 프로젝트에 적합한 것이 확실하지 않다 :

  • 가 결합하기 어려운 재사용 문법 및/또는 문법의 조각
  • ANTLR 코드 생성을 수행 - 만들기 기존 파서를 변경하려면 Antlr로 돌아가서 코드를 다시 생성하고 코드를 다시 코드베이스에 통합 한 다음 단위 테스트를 실행해야합니다.
  • 트리 작성/처리는 내부에서 다른 언어를 처리해야합니다. Antlr - 향후 개발자에게 잠재적 인 문제점

기본적으로 Antlr을 좋아하지만 다소 단순한 언어/형식의 경우 100 개의 파서가 아닌 복잡한 언어에 대해 하나 또는 두 개의 파서를 만드는 것이 더 적합하다고 생각합니다.

Antlr 파서 생성기의 대안은 파서 결합 자입니다. 장점은 파서가 코드에 직접 통합되어 재사용, 테스트 및 추상화가 매우 쉽다는 것입니다. 또한 미래의 개발자는 새로운 도구를 사용하는 방법을 배울 필요가 없습니다. 파서 결합 자의 단점은 자바에서 이들을 사용하기위한 강력한 라이브러리를 모른다는 것입니다.

그래서 질문은 다음과 같습니다

  1. 인가 ANTLR 적합/같은 대규모 분석 프로젝트를위한 것?
  2. Java의 대규모 구문 분석을위한 다른 옵션은 무엇입니까?

참고 : 파일 형식의 일부는 CSV 또는 탭으로 구분이되어, 일부는 좀 더 복잡하고, 일부는 자바만큼 복잡하다. 의미론 적으로, (모두가 아닐지라도) 매우 복잡 할 수도 있습니다.

+1

대답에 대한 중요한 정보가 누락되었습니다. 구문 및 의미와 관련하여 이러한 형식의 복잡성은 무엇입니까? 복잡성이 Java 언어 자체의 복잡성과 같으면 다른 것들이 필요합니다. 반면에 모든 형식이 CSV 수준에 있다면 훨씬 더 가벼운 방법을 사용할 수 있습니다. –

+0

'# 1' : _ "문법 및/또는 문법을 결합하고 재사용하기가 어렵습니다."_ 나는 동의하지 않습니다. ANTLR에서 문법을 다른 문법으로 공유/가져올 수 있습니다. '# 2' : 맞습니다.'# 3' : 나는 그게 무슨 뜻인지 모르겠다. 또한 나는 A.H.에 중요한 정보가 아직 없다는 데 동의합니다. –

+0

@ A.H. - 제안 해 주셔서 감사합니다. –

답변

0

저는 개인적으로 과거에 Apache Tika을 사용했는데, 이는 제 요구에 부응하고 다양한 형식을 포괄합니다. 나는 Antlr을 사용한 적이 없으므로 정말 논평 할 수 없다.

+0

그건 그냥 파서 모음 일 것 같습니다. ?? –

+0

자동 파일 유형 감지 및 70 개 이상의 MIME 유형 추출 및 구문 분석을 수행 할 수있는 툴킷입니다. – emt14

+0

아니, 이건 내가 도움이되지 않습니다. –

0

There is a parsing technique 이것은 파서 구성 요소를 결합, 재사용, 상속 및 확장 (런타임에 실행중인 파서를 확장하는 경우에도)하기에 완벽하게 적합합니다.

나는 코드 생성 도구와 멋진 선언적 DSL을 단점으로 생각하지 않지만, 아마 자바 서브 컬쳐와 너무 멀리 떨어져있다. 이러한 우려가 여전히 유효하다면 문제가되지 않습니다. 조합기를 사용하여 Packrat를 구현할 수 있습니다. Java에서는 (클로저와 람다가 적절하지 않기 때문에) 조금 어색 할 수 있지만 일반적인 임시 재귀 파서보다 훨씬 읽기 쉽습니다.

+0

파서 생성기 구현은이 프로젝트의 범위를 벗어납니다. 문법을 사용하는 것은 환상적입니다. 사실, 정확하게하고 싶습니다.하지만 도움이되는 도구가 필요합니다. –

+0

@Matt Fenwick, 만약 당신이 combinators-based (또는 ad hoc) 방식을 선택한다면 당신은 generator가 필요 없을 것입니다. 물론 사용할 수있는 도구가 있습니다 (예 : http://cs.nyu.edu/rgrimm/xtc/ –

+0

). 언급 한 이유로 대규모 Java 프로젝트에 적합한 지 알아야합니다.이 도구를 사용하여 이러한 프로젝트를 수행 한 경험이 있습니까? –

관련 문제