텍스트 네트워크 프로토콜과 관련된 문법을 표현하는 일반적인 방법은 ABNF를 사용하는 것입니다.일반 언어가 아닌 텍스트 프로토콜?
ABNF는 EBNF 관련 메타 구문과 마찬가지로 문맥 자유 문법을 설명 할 수 있습니다.
이러한 문맥없는 문법은 비정규 언어를 나타낼 수 있습니다. 맞습니까?
네트워크 스택을 구현하는 일반적인 방법은 상태 시스템을 개발하는 것입니다. 정규 언어가 아닌 텍스트 네트워크 프로토콜이 있습니까?
텍스트 네트워크 프로토콜과 관련된 문법을 표현하는 일반적인 방법은 ABNF를 사용하는 것입니다.일반 언어가 아닌 텍스트 프로토콜?
ABNF는 EBNF 관련 메타 구문과 마찬가지로 문맥 자유 문법을 설명 할 수 있습니다.
이러한 문맥없는 문법은 비정규 언어를 나타낼 수 있습니다. 맞습니까?
네트워크 스택을 구현하는 일반적인 방법은 상태 시스템을 개발하는 것입니다. 정규 언어가 아닌 텍스트 네트워크 프로토콜이 있습니까?
"기존의"줄 기반 텍스트 프로토콜을 사용한다고 가정합니다. 예를 들어, XML을 사용하는 모든 프로토콜은 XML이 일반 언어가 아니기 때문에 일반 형식이 아닙니다 (실제로 개별 문자의 수준을 보면 XML은 컨텍스트가없는 것입니다). 이 경우, 나는 비정상적인 프로토콜에 대해 정말로 생각할 수 없다. 언어 구문에서 비정규 화하는 가장 일반적인 방법은 파서가 계산할 수 있도록 요구하는 것이고, 메시지를 파싱 할 수있는 능력을 요구하는 프로토콜은 단지 복잡 할뿐입니다 (예 : 일치 괄호) 또는 제한적 (예 : 임의로 긴 목록을 허용하는 대신 명시 적으로 계산 함).
BNF의 사용은 구문 설명으로 이해하기 쉽기 때문에 문맥 자유로 인해 필요한 추가 기능이 제공되지 않기 때문일 수 있습니다. 필자가 생각하기에 가장 큰 이점은 변수를 사용하여 일반적인 구문을 나타낼 수 있다는 점입니다. 일반적인 인터넷 프로토콜 사양에서 BNF를 살펴보면 일반 언어의 기능 (무제한 반복, 선택, 선택)을 실제로 사용한다는 점을 알 수 있습니다.
프로토콜의 상태 머신 구현을 언급 한 내용이 나에게 약간의 오해처럼 들립니다. 상태 머신으로 구현되는 파서는 아니지만 프로토콜 엔진 및 상태 전환은 입력의 개별 문자 또는 토큰에 의해 트리거되지 않고 전체 메시지에 의해 트리거됩니다. 그리고 일반적으로 프로토콜 상태 머신의 상태는 실제 통신보다 통신의 설정 및 해체에 더 많은 관심이 있습니다. 예를 들어, TCP 상태 머신은 11 개의 상태를 가지며, 그 중 하나만이 연결 확립 상태에 충분합니다. 모든 실제 데이터 전송이 발생하고 나머지는 모두 연결을 열고 닫는 것입니다. (예, 나는 TCP가 텍스트가 아니라는 것을 알고 있지만, 이것은 상태 머신이 설정된 잘 알려진 프로토콜이므로 좋은 예가됩니다 : 프로토콜 엔진 수준에서는 메시지 구문이 텍스트인지 또는 이진.)