2014-04-19 2 views
6

현재 Antlr 문법은 약 1200 행입니다. 그것은 내가 원하는 언어를 파싱하지만, 최소한 하나의 구문에 대해서는 더 작은 입력 파일에 대해서조차도 매우 느립니다. 실행 시간은 구조의 각 추가 요소에 대해 기하 급수적으로 증가하는 것으로 보입니다.Antlr 문법을 프로파일하는 방법

이러한 성능 문제를 디버깅/프로파일 링하기위한 좋은 지침이 있는지 알고 싶습니다.

VisualVM을 사용하여 이미 시도했지만 closureCheckingStopState와 closure_라는 두 메서드의 이름이 있지만 문법에 무엇이 잘못되었는지 파악하는 데는 많은 시간이 필요하지 않습니다.

답변

1

저는 문법의 성능을 분석하고 개선하기 위해 두 가지 기본 항목을 사용합니다.

  1. 최신 릴리스 ANTLRWorks 2에는 고급 프로파일 링 기능이 포함되어 있습니다. 프로파일 러는 CharStream 또는 TokenStream (예를 들어, 입력을 전처리 용) 사용자 정의를 필요로 언어를 지원하지 않습니다

    • : 전류 제한은 다음과 같습니다.
    • 프로파일 러는 렉서 또는 파서에 사용자 정의 임베디드 작업을 실행하지 않으므로 문법은 이러한 작업에 의존하지 않고 구문 분석 트리를 생성 할 수 있어야합니다. -> skip 또는 -> channel(HIDDEN)과 같은 표준 렉서 커맨드는 문제가되지 않습니다.
    • 프로파일 러의 출력은 대부분의 ANTLR 사용자가 쉽게 이해할 수없는 숫자 표인 특히입니다. 숫자에 대한 응답으로 무엇을해야하는지 알 수 있습니다.
  2. 나는 이러한 기능을 "드물게"지금까지 그들의 유일한 목적으로 문서화되어 ANTLR 4 주 기준 릴리스에 존재하지 최적화의 숫자를 포함하는 fork of the primary release를 사용의 자체 개발을 지원했다 ANTLRWorks 및 GoWorks. 대부분의 문법에서이 포크는 대략적으로 참조 릴리스와 동일합니다. 그러나 일부 알려진 문법의 경우 "최적화 된"릴리스는 참조 릴리스보다 200 배 이상 빠릅니다.

특히 문법과 입력을 제공 할 수 있다면 분석을 실행하고 결과의 주요 부분을 해석 할 수 있습니다.


최신 릴리스 ANTLRWorks는 공식 NetBeans 업데이트 센터를 통해 배포됩니다. 단순히 실행 도구 → 플러그인, 로 이동하십시오. 사용 가능한 플러그인ANTLRWorks 편집기을 찾습니다.

프로파일 러를 실행하려면 실행 → 해석기 해석 ... 명령을 사용하십시오. 결과 창은 구문 분석 작업 후 창 → 파서 디버거 컨트롤러을 선택하여 사용할 수 있습니다.

+0

내가 ANTLRWorks2의 프로파일을 찾기 위해 노력했다,하지만 난 그것을 찾을 수 없습니다. 어디에 있습니까? – oyse

+0

@oyse 정보와 함께 내 대답의 맨 아래에 섹션을 추가했습니다. –

+0

업데이트 URL http://tunnelvisionlabs.com/downloads/nbupdates/aw21/updates.xml은 404를 제공합니다. 또한 최신 버전인지 확신 할 수 없습니다. 나는 2 월에 그것을 다운로드했으나 플러그인 대화 상자에 버전 2.0이지 2.1이 아니라고 말했습니다. 더 자세한 내용은 ANTLRWorks 2를 참조하십시오. 20130716-5d2e7d936ca1 – oyse

1

JetBrains의 아이디어 플러그인의 프로파일 옵션이 있습니다

참조 : https://github.com/antlr/intellij-plugin-v4/blob/master/README.md

오른쪽 규칙을 테스트 할 수있는 규칙을 클릭하고

  • 구문 분석에 대한 탭을 얻을 것이다 트리
  • 계층 구조
  • Profiler

아래의 스크린 샷 예를 참조하십시오.

프로파일 러 탭의 모호성 줄은 모호한 구문 분석 규칙을 찾는 데 도움이됩니다. 빨간색 선을 클릭하면 규칙이 강조 표시됩니다.

프로필 탭 Profile Tab

구문 분석 트리 탭 ParseTree Tab

관련 문제