私はPythonの基本的なネットワークプロトコルに取り組んでいます。これは、ASCII文字列(読み取り:EOLで終了)とバイナリデータの両方を転送できるはずです。後者を可能にするために、バイナリになるバイト数が含まれるように文法を作成することにしました。
SimpleParseの場合、これまでの文法は次のようになります[1]。
EOL := [\n]
IDENTIFIER := [a-zA-Z0-9_-]+
SIZE_INTEGER := [1-9]*[0-9]+
ASCII_VALUE := [^\n\0]+, EOL
BINARY_VALUE := .*+
value := (ASCII_VALUE/BINARY_VALUE)
eol_attribute := IDENTIFIER, ':', value
binary_attribute := IDENTIFIER, [\t], SIZE_INTEGER, ':', value
attributes := (eol_attribute/binary_attribute)+
command := IDENTIFIER, EOL
command := IDENTIFIER, '{', attributes, '}'
問題は、以下が実行時にSIZE_INTEGERバイトのバイナリデータのチャックになることをSimpleParseに指示する方法がわからないことです。
この原因は、現在の私のニーズを満たすターミナルBINARY_VALUEの定義であるため、変更できません。
ありがとう
編集
ソリューションは、本番のbinary_attributeと一致したときに停止し、ASTノードに手動で(socket.recv()を介して)データを入力するように指示していると思いますが、それを行うにはどうすればよいですか?
編集2
Base64エンコーディングなどはオプションではありません。
[1]私はそれをテストしていないので、それが実際に機能するかどうかはわかりません。アイデアを得るのはあなただけです。