2009-02-05 5 views
10

스마트 전기 계량기와 통신하기 위해 다양한 네트워크를 통해 전송하려면 옥텟 스트림을 읽고 쓰는 것이 필요합니다. 이진 데이터 형식을 설명하는 ANSI 표준 인 ANSI C12.19가 있습니다. 데이터 형식이 지나치게 복잡하지는 않지만 표준은 많은 고유 한 유형을 설명한다는 점에서 매우 크다 (500 페이지 이상). 이 표준은 EBNF 문법으로 완벽하게 설명됩니다. ANTLR을 사용하여 EBNF 문법 또는 수정 된 버전을 읽고 옥텟 스트림을 읽고 쓸 수있는 C# 클래스를 만들 것을 고려하고 있습니다.ANTLR은 바이너리 데이터 형식을 serialize/deserialize 할 수있는 적절한 도구입니까?

ANTLR을 사용하는 것이 좋습니까?

그렇다면 ANTLR 3.1을 활용하려면 무엇을해야합니까? 뉴스 그룹 아카이브를 검색하면 문자 대신 바이트를 읽을 수있는 새로운 스트림을 구현해야하는 것처럼 보입니다. 그게 전부 아니면 Lexer 파생 상품을 구현해야합니까?

ANTLR이 스트림 읽기/파싱을 도울 수 있다면 스트림을 쓸 수 있습니까?

감사합니다.

단의 finucane는

답변

10

이 제목은 ANTLR 메일 링리스트에서 수시로 발생합니다. 바이너리 파일 형식이 매우 규칙적이고 오버 헤드의 가치가 없기 때문에 대답은 보통 no입니다.

+2

ANTLR 메일 링리스트에 500 페이지 (?!)의 표준 주제가 자주 등장합니까? 표준을 올바르게 구현하려면 훌륭한 파서 생성기를 사용하는 이점보다 크려면 기계의 오버 헤드가 커야합니다. –

4

문법을 갖는 것은 당신에게 엄청난 다리 위로를주는 나에게 보인다.

ANTLR 3.1에는 구문 분석/렉싱과 별도로 StringTemplate 및 코드 생성 기능이 있으므로 문제를 그렇게 분해 할 수 있습니다.

나에게 승자처럼 보일만한 가치가있는 것 같습니다.

16

Ragel을 살펴보십시오. 그것은 on-the-wire 프로토콜을 구현하는데 유용한 상태 머신 컴파일러/렉서이다. 매우 빠른 코드를 생성한다는 보고서를 읽었습니다. 파서와 템플릿 엔진이 필요 없다면, ragel은 ANTLR보다 오버 헤드가 적습니다. 본격적인 파서, AST 및 훌륭한 템플릿 엔진 지원이 필요한 경우 ANTLR이 더 나은 선택 일 수 있습니다.

+0

나는 전에 Ragel에 대해 들어 보지 못했다. 그것은 흥미로 들리며 내 문제를 해결할 수 있습니다. 감사. –

+1

재귀 규칙이 필요한 경우 Ragel에서 약간의 고통을 겪을 수 있습니다. 그렇지 않다면, 그것은 당신의 직업을위한 훌륭한 도구 일 것입니다. –

관련 문제