문제

스마트 전기 미터와 통신하기 위해 다양한 네트워크를 통해 옥트 스트림을 읽고 써야합니다. 이진 데이터 형식을 설명하는 ANSI 표준 ANSI C12.19가 있습니다. 데이터 형식이 지나치게 복잡하지는 않지만 표준은 여러 가지 유형을 설명한다는 점에서 표준이 매우 큽니다 (500+ 페이지). 표준은 EBNF 문법에 의해 완전히 설명됩니다. EBNF 문법 또는 수정 된 버전을 읽고 Octet 스트림을 읽고 쓸 수있는 C# 클래스를 작성하기 위해 Antlr을 사용하는 것을 고려하고 있습니다.

이것은 antlr을 잘 사용합니까?

그렇다면 Antlr 3.1을 활용하려면 어떻게해야합니까? 뉴스 그룹 아카이브 검색에서 문자 대신 바이트를 읽을 수있는 새 스트림을 구현 해야하는 것 같습니다. 그게 전부입니까 아니면 Lexer 파생물도 구현해야합니까?

antlr이 스트림을 읽거나 구문 분석하는 데 도움이되면 스트림을 작성하는 데 도움이 될 수 있습니까?

감사.

Dan Finucane

도움이 되었습니까?

해결책

이 주제는 ANTLR 메일 링리스트에서 때때로 나타납니다. 이진 파일 형식은 매우 규칙적이며 오버 헤드의 가치가 없기 때문에 대답은 일반적으로 아니오입니다.

다른 팁

당신은 살펴볼 수 있습니다 ragel. 온 와이어 프로토콜을 구현하는 데 유용한 상태 머신 컴파일러/Lexer입니다. 매우 빠른 코드를 생성한다는 보고서를 읽었습니다. 파서와 템플릿 엔진이 필요하지 않은 경우 Ragel은 Antlr보다 오버 헤드가 적습니다. 본격적인 파서, AST 및 멋진 템플릿 엔진 지원이 필요한 경우 ANTLR이 더 나은 선택 일 수 있습니다.

문법을 갖는 것은 당신에게 엄청난 다리를 부여하는 것 같습니다.

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

시도할만한 가치가있는 나에게 승자처럼 보인다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top