큰 상용 응용 프로그램에서 사용자 지정 텍스트 파일 형식을 읽을 때 사용할 수있는 훌륭한 파서 생성기를 찾고 있습니다. 현재이 특정 파일 형식은 수작업 재귀 파서로 읽혀 지지만 그 형식이 성장하고 복잡해지면서 그 접근법은 관리하기 어려워졌습니다.제한된 메모리가있는 C++ 응용 프로그램에 가장 적합한 ANTLR 파서 생성기입니까?
궁극적 인 해결책은이 형식에 맞는 적절한 문법을 작성한 다음 yacc과 같은 실제 파서 생성기를 사용하여 읽는 것일 수 있지만 사용하려고하는 생성기를 결정하는 데 문제가 있습니다. 문제의 가치가있는 것입니다. 저는 ANTLR과 Spirit을 살펴 봤습니다. 그러나 우리 프로젝트는 earlier answers 이상의 특수한 제약 조건을 가지고있어서 우리에게 적절한지 궁금합니다. 특히, 나는 다음을 필요로한다 :
- MSVC로 C 코드 또는 C++ 코드를 생성하는 파서. ANTLR 3은 C++을 지원하지 않습니다. 그것은 똑바로 C를 생성한다고 주장하지만, 실제로 작동하도록하기위한 문서는 혼란 스럽습니다.
- 심각하게 제한된 메모리 사용. 메모리는 우리 앱에서 엄청난 프리미엄을 받고 있으며 심지어 작은 누출도 치명적입니다. 나는 우리의 커스텀 malloc()을 사용하기 위해 파서의 메모리 할당자를 오버라이드 할 수 있어야한다. 또는 적어도 모든 메모리를 가져 오는 인접한 풀을 제공해야한다. (그리고 이후에 일괄 블록을 할당 취소 할 수있다.) 나는 파서 실행 파일 자체에 대해 약 200kb를 남겨 둘 수 있지만 파싱에 할당 된 동적 힙은 이후에 해제되어야한다.
- 성능이 좋습니다. 이것은 덜 비판적이지만 3ghz 프로세서에서 1 초 내에 100kb의 텍스트를 파싱 할 수 있어야합니다.
- GPL이 필요합니다. 우리는 GNU 코드를 사용할 수 없습니다.
나는 ANTLRworks의 IDE 및 디버깅 도구를 좋아하지만, C 타겟을 실제로 응용 프로그램과 함께 사용하는 것이 큰 사업이 될 것으로 보인다. 내가 그 palaver에 착수하기 전에 ANTLR이이 일에 적합한 도구입니까?
는 문제의 텍스트 형식과 같이 보입니다 :
attribute "FluxCapacitance" real constant
asset DeLorean
{
//comment foo bar baz
model "delorean.mdl"
animation "gullwing.anm"
references "Marty"
loadonce
}
template TimeMachine
{
attribute FluxCapacitance 10
asset DeLorean
}
ANTL3은 C++을 지원합니다. https://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=2687097이 대답을 업데이트해야합니다. –