解析 .proto 文件而不创建描述符

mbg*_*irp 4 python protocol-buffers

我知道使用 protobuf 的正常方法是创建 .proto,然后将其编译成相关类 - Java、Python 等。我有一个需求,可能需要在 Python 代码中解析 .proto 文件。有没有人尝试为 .proto 文件创建自己的解析器?是否建议始终编译类而不是直接解析 .proto?

Mar*_*ell 6

它可能不会直接帮助您,但是是的,我已经编写了自己的解析器(实时演示解析器源代码)。这段代码是 C# 因此它可能无济于事,显然是可能的。我开始一个分支,7天前,现在它基本上是功能完善,包括解析器,发电机和一个交互式网站的语法错误高亮显示-因此它不一定是一个巨大的工作量。

然而!您可能会发现仅通过 shell 执行“protoc”(在maven 上可用)更容易。如果您使用-oFILE/--descriptor_set_out=FILE开关(同样的事情,替代语法),那么它会解析输入 .proto 文件并写入一个FileDescriptorSetdescriptor.proto序列化的文件。这意味着您可以使用常规工具以您选择的语言为 descriptor.proto 生成代码,然后文件反序列化为一个FileDescriptorSet实例。完成后:您只需遍历对象模型即可查看文件、消息、枚举、字段等。 IIRC 一些 protobuf 实现支持完全从描述符(这是 protoc 发出的)工作,无需代码生成步骤。