- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Python 开发一个基本的网络协议(protocol),它应该能够传输 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, '}'
问题是我不知道如何指示 SimpleParse 以下将是 SIZE_INTEGER 字节的二进制数据在运行时。
原因是终端 BINARY_VALUE 的定义满足了我现在的需求,因此无法更改。
谢谢
编辑
我想解决方案会告诉它在匹配生产 binary_attribute 时停止并让我手动填充 AST 节点(通过 socket.recv()),但是如何做到这一点?
编辑2
Base64 编码或类似编码不是一种选择。
[1]我没有测试过,所以我不知道它是否实际有效,仅供您了解
最佳答案
如果语法像您引用的一样简单,那么使用解析器生成器可能就太过分了?您可能会发现手动滚动自己的递归解析器更简单、更快捷。
关于python - 运行时之前的 SimpleParse 非确定性语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537708/
我正在使用 Python 开发一个基本的网络协议(protocol),它应该能够传输 ASCII 字符串(读取:EOL 终止)和二进制数据。为了使后者成为可能,我选择创建语法,使其包含即将成为二进制的
我正在尝试使用以下 EBNF 传递一个 nuke 脚本(foundry .nk 文件),但我似乎在我的“内容”文字中捕获了太多内容。此外,我很确定我在格式化时犯了一些主要的菜鸟错误。谁能帮帮我? EB
我使用以下代码的目的是将 HTML 文件转换为 PDF try { com.itextpdf.text.Document document = new com.itextpdf.text
我是一名优秀的程序员,十分优秀!