2010-12-15 2 views
0

현재 다양한 정보 비트를 추출하기 위해 정규식을 사용하여 텍스트 보고서를 구문 분석하고 있습니다. 이 접근 방식이 작동하는 동안 정규 표현식을 유지하는 것이 점점 어려워집니다. Antlr이 장기적으로 작업을 수행하는 더 좋은 방법을 제공 할 수 있는지 궁금합니다. BTW, 전 Antlr을 사용하지 않았습니다.ANTLR은 텍스트 보고서를 분석하는 데 적합합니까?

AFAIK, Antlr은 주로 구문 분석에 사용되지만 내 보고서는 언어가 아닙니다. 다른 한편으로는,이 보고서는 몇 가지 패턴을 따른다. 그래서 정규 표현식을 사용하여 정보를 추출 할 수있다.

내 텍스트 보고서에 대한 추가 정보 : 보고서에는 여러 섹션이 있으며 나머지 섹션은 무시하고 일부 섹션에만 관심이 있습니다. 예를 들어, 쓰레드 덤프 섹션이 있습니다 :

===Start=== 
(some text I do not care about.) 
thread <thread-number> <owning-proc-name> <proc-id> 
<resource-owned-by-thread> (optional line) 
... 
===End=== 

그리고 종료 된 응용 프로그램 섹션이 있습니다 :

===Start=== 
(some text I do not care about, followed by the stack trace of the app) 
<app-name> 
<stack-layer1> 
<stack-layer2> 
... 
===End=== 

은 내가 보고서를 분석하여 나갈 것을 희망하는 게터와 데이터 객체 인은 메소드를 보고서의 다양한 데이터 조각에 적용합니다.

Antlr에게 적합한 작업입니까, 아니면 다른 곳에서 봐야합니까? 고마워요!

답변

3

정규식을 사용하지 않으려는 텍스트를 쉽게 필터링 할 수 있습니까? 그렇다면, 당신은 꽤 효과적 일 것이다 하이브리드 접근 방식이 걸릴 수 : 부품을 따로 휴식하는 ANTLR 파서를 통해

  • 실행을 보고서를 무시하고 텍스트를 제거

    1. 실행 정규식 필터를 통해 보고서를 당신 신경 쓰이는 부분

    이 기능을 사용하려면 신경 쓰이는 부분이 ANTLR 문법을 작성할 수있는 언어를 따라야합니다.

    다른 대안은 무시하고 나머지 부분을 토큰화할 부분을 제거하는 사용자 지정 스캐너를 작성하는 것입니다.

    모든 것은 실제로 유지해야하는 부품의 복잡성과 규칙성에 달려 있습니다.

  • 관련 문제