gpt4 book ai didi

python - 运行时之前的 SimpleParse 非确定性语法

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:59 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com