3

テキスト ネットワーク プロトコルに関連付けられた文法を表す通常の方法は、ABNF を使用することです。

あらゆる EBNF 関連のメタ構文と同様に、ABNF は文脈自由文法の記述を可能にします。

これらの文脈自由文法は、非正規言語を表すことができますよね?

ネットワーク スタックを実装する通常の方法は、ステート マシンを開発することです。通常の言語ではないテキスト ネットワーク プロトコルはありますか?

4

1 に答える 1

3

「伝統的な」行ベースのテキストプロトコルについて言及していると思います。たとえば、XML は正規の言語ではないため、XML を使用するプロトコルはすべて正規のプロトコルではありません (実際、個々の文字のレベルを見ると、XML は文脈自由でさえありません)。その場合、非正規のプロトコルは本当に考えられません。言語構文を非正規化する最も一般的な方法は、パーサーがカウントできるようにすることです。メッセージを解析するためにそのような機能を必要とするプロトコルは複雑になると思われます (たとえば、マッチングかっこ) または制限 (たとえば、任意の長いリストを許可する代わりに、明示的なカウントを使用することによって)。

BNF を使用するのはおそらく、構文記述として理解しやすいためであり、コンテキストの自由が必要な追加機能を提供するためではありません。主な利点は、変数を使用して共通の構文を表す機能にあると思います。一般的なインターネット プロトコル仕様の BNF を見ると、それらが実際には通常の言語の機能のみを使用していることに気付くでしょう。

プロトコルのステートマシン実装に関するあなたの発言は、私には誤解のように聞こえます。ステート マシンとして実装されるのはパーサーではなく、プロトコル エンジンであり、ステート遷移は入力内の個々の文字やトークンではなく、完全なメッセージによってトリガーされます。通常、プロトコル ステート マシンの状態は、実際の通信よりも、通信の確立と破棄に関係しています。たとえば、TCP ステート マシンには 11 の状態があり、そのうちの 1 つだけが接続確立状態 (すべての実際のデータ転送が行われる場所) に十分であり、残りはすべて接続の開閉に関するものです。(はい、TCP がテキストではないことは知っていますが、確立されたステート マシンを備えたよく知られたプロトコルであるため、良い例として役立ちます。

于 2009-12-23T14:40:30.613 に答える