2010-02-03 2 views
3

TLDR : 각 형식에 대해 다른 코드로 수동으로 다목적 파서를 만든 경우 장기적으로 파서 코드 한 개와 ANTLR, PyParsing 또는 유사한 문법을 ​​사용하여 각 형식을 지정하는 것이 더 효과적일까요?공식 문법을 사용하기 위해 다목적 로그 파일 파서를 다시 작성하면 유지 관리가 향상됩니까?

컨텍스트 : 내 업무에는 ~ 50 가지 벤치 마크의 벤치 마크 로그 파일이 많이 포함됩니다. XML에는 몇 가지, 몇 가지 HTML, CSV 및 문서화 된 사양이없는 독점적 인 내용이 많이 있습니다. 이 데이터를 직접 입력 할 때 저와 제 동료들을 구하기 위해 필자는 균일 한 인터페이스로 정기적으로 처리하는 모든 형식을 처리하는 구문 분석 도구를 작성했습니다. 디자인은 그래도 깨끗하지 않습니다.

나는이 것을 Python에 작성하고 Parser 클래스를 만들었습니다. 각 파일 형식은, 파서의 read() 메소드에 독자적인 코드를 제공하는 구현으로서 처리됩니다. 필자는 문법을 사용하여 각 형식을 이해하는 파서 (Parser) 정의를 한 가지만 갖고 싶다는 생각을 좋아하지만 이전에는 해보지 않았습니다.

리팩토링을 마친 후에는 내 시간이 가치가 있으며 앞으로 다른 초보자도 쉽게 사용할 수 있습니까?

답변

3

귀하의 질문에 100 % 확실하게 답변 할 수는 없지만 의견을 제시해 드릴 수는 있습니다.

적절한 문법 대 손 롤식 정규 표현식 "파서"를 사용하는 선택은 입력이 얼마나 균일한지에 따라 결정됩니다.

입력이 매우 균일하고 Python이나 Perl처럼 문자열을 잘 처리하는 언어를 이미 알고 있다면 기존 코드를 유지해야합니다.

반면에 Antlr과 같은 파서 생성기는 입력에 오류와 불일치가있을 때 정말 빛납니다. 그 이유는 공식 문법을 사용하면 입력 스트림을 수동으로 걷는 것에 대해 걱정할 필요없이 특정 상황에서 일치해야하는 것에 집중할 수 있기 때문입니다.

또한 입력 스트림에 오류가있는 경우 Antlr 대 정규식을 사용하여 처리하는 것이 더 쉬운 것으로 나타났습니다. 그 이유는 몇 가지 옵션을 사용할 수 있다면 Antlr은 조건부를 통한 롤백을 포함하여 정확한 경로를 지정하는 기능을 내장하고 있기 때문입니다.

이 모든 것을 말하면 작업 코드에 대해 많이 언급됩니다. 나는 다시 쓰기를 원한다면 재 작성이 제품 사용자에게 어떻게 도움이되는지에 대한 유스 케이스를 만들려고 노력한다.

+0

답변 해 주셔서 감사합니다. 입력이 매우 균일하지 않습니다. 새로운 결과 형식이 이전 형식과 비슷하게 유지된다는 것을 보장하면서 벤치 마크가 항상 개선되었습니다. 파일은 서로 병합 된 결과의 부분적 또는 여러 번 일괄 처리 될 수 있습니다. 저는 PyParsing을 제공하고 있습니다. 처음에는 Python 구문 분석 도구를 사용하지 않았습니다. 왜냐하면 대부분의 사용자와 EBNF와 같은 것의 학습 곡선을 가지고 있다고 생각했기 때문입니다. 그렇다면 제 동료에 대해 조금 더 생각하고 일반적으로 스크립팅을하는 것이 더 새롭다는 것을 깨달았습니다. 그래서 파이썬은 더 이상 장벽이되지 않을 것입니다. 지금까지 잘되고있어. –