>>945
>yaccとか難しすぎて俺には無理です。

yaccについては、>>938で書いたのは単なる思いつきだから、スルーでオケー。
ただ、preccsは面白いと思う。一読を薦めるヨ。自分も実際には触った事ないけどネ。

>こんな感じ?
だいたい、そんな感じ(w
ただ、C++のテンプレートは使用せず、一般的なTLVReaderクラスを定義していた。
イテレータという言葉は(>>938のカキコ内では)デザインパターン用語のつもりで書いた。
疑似コードで書くと、こんな感じ。(実際にはC言語で(GTKみたいな)疑似クラスで実装していた)

unsigned char *recv_buf;
TLVReader reader;

reader = TLVReader.new(recv_buf);
while (tlv = reader.get()) {
 switch (tlv.type) {
 case TYPE_XXX_PDU:
  : // Type別の処理
 }
}

階層的なTLV構造の場合には、Type別処理の中で、更に別のTLVReaderインスタンスを生成する。

  xxx_reader = TLVReader.new(tlv.value)
  while (xxx_tlv = xxx_reader.get()) {
   switch (xxx_tlv.type) {
    : // Sub Typeの処理
   }
  }