【发布时间】:2016-05-27 07:28:23
【问题描述】:
我很难弄清楚如何为抽象数据结构编写 ANTLR4 语法。例如,考虑一个 Python 程序,该程序读取和写入人员列表,其中一个人有姓名、电子邮件地址和电话号码。相同的抽象数据结构(一个 Python 字典列表)可以以多种格式存储,一个每行一个人的 csv 文件,一个带有对象列表的 JSON 文件,一个 XML 文件等,但我将首先JSON.
grammar People;
import JSON;
people: person+;
person: name email phone?;
name: STRING;
email: STRING;
phone: STRING;
JSON 语法定义了七种value 类型,而 people 和 person 定义了我的抽象类型,但如何在不强制语法为 JSON 特定的情况下将它们链接在一起并不明显。
问题:假设有定义值类型array、obj和STRING的三种编解码器语法(JSON、CSV、XML),一个语法如何指定people是person的array,person是三个的obj命名为 STRINGS?
编辑:
为了澄清,我想读取一个 JSON 实例: [{"name": "Fred", "email": "fred@foo.com"}] 到一个由 ANTLR 语法定义的 Python 对象中,拒绝数据是有效的 JSON,但不是有效的 people 对象。并通过 import 使用不同的编解码器语法将该对象转换为 CSV 文件:“姓名、电子邮件、电话 \n Fred、fred@foo.com”。我还想使用相同的语法来生成验证人员列表的 JSON 实例的 JSON Schema 和验证人员列表的 XML 实例的 XSD 文件。
换句话说,我想知道 ANTLR 是否能够做与 ASN.1 相同的事情——独立于这些对象的序列化定义数据对象的结构。如果是这样,请了解 ANTLR 如何表示结构和编码/序列化之间的接口。
【问题讨论】:
-
请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅如何提问页面以帮助澄清此问题
-
这是一个X/Y Problem,您正在尝试重新创建类似于 Jackson Mapper 库的东西。 ANTLR 不会帮助你。
标签: json antlr4 abstract-syntax-tree