現在、Rebol 3 のFirmata プロトコルの Midi メッセージを解析していて、これまでに見たことのない状況に遭遇しました。
基本的に、フレーミング バイト間でバイトをコピーする一般的なルールがあります。ただし、そのルールはフレーミング バイトを消費しています。コードを次のように減らしました。
data: #{
F06C00010101040E7F000101010308040E7F00010101040E7F0001010103
08040E7F000101010308040E7F00010101040E7F00010101040E7F0001010103
08040E7F000101010308040E7F000101010308040E7F00010101040E7F000101
01040E7F00010101020A7F00010101020A7F00010101020A7F00010101020A7F
00010101020A06017F00010101020A06017FF7
}
sysex-start: #{F0}
sysex-end: #{F7}
capability-query: #{6B}
capability-response: #{6C}
capability-end: #{7F}
received-rule: [
sysex-start
capability-response-rule
sysex-end
]
capability-response-rule: [
capability-response
[
capability-end |
some [copy pin 1 skip]
]
]
parse data received-rule
問題は、バイナリsome [copy pin 1 skip]
を飲み込んでいるということです。sysex-end
(サブルールに移動せずに) ルールを再構築する方法はあり
sysex-end
ますか?このサブルールから抜け出す場合に役立つ解析キーワードはありますか?
(注: 仕様に従ってデータを解釈していないことは承知しています。)