用于以JSON格式解析计算的ANTLR

时间:2017-01-28 23:00:25

标签: json.net antlr4

我是ANTLR的新手并试图查看ANTLR是否适合我的场景,或者我应该坚持使用JSON反序列化库并编写一些自定义代码。

  1. 输入文本是一个JSON,表示类似

    的表达式
    {
    "Operator":"ADD",
    "Operands": [{"Operator":"ADD", "Operands":[{"OperandValue":23},{"OperandValue":32} ]},
             {"Operator":"ADD", "Operands":[{"OperandValue":11},{"OperandValue":12} ]}]}
    }
    
  2. 运营商名单可以发展

  3. JSON是以编程方式创建的,而不是由用户手动创建的。

  4. 我必须阅读此JSON并对其进行验证并向我的客户提供有意义的错误消息。

  5. 如果JSON处于有效/解析状态,我必须将JSON转换为TSQL代码并在SQL服务器上执行。

  6. 我的所有代码都在C#中,我需要:

    1. max Debug support and ease
    2. 单元可测试性
    3. 少量自定义代码
    4. 分钟。学习
    5. 有上述两个需求,我试着写一个粗略的ANTLR语法和自定义代码,下面是我的观察

      1. ANTLR在某种程度上我的逻辑将驻留语法文件,这可能很难

        • 为新来者调试编写语法。和单元测试。为了做我的语法POC我只依靠context.GetText()属性来弄清楚我目前的位置并改变我的语法。
        • 我必须编写一个模块化的语法(构建块),以便我可以为最小的部分和更易于管理的访问者提供访问者。
        • 如何向我的客户提供更多含义的完整信息,他们对我的语法解析引擎知之甚少?
      2. 自定义JSON反序列化(JSON.NET)

        • 代码易于调试,每个人都理解。我得到一个JSON阅读器并写入条件来检查JSON对象或JsonArray是否具有值为ADD且类似的Property Operator。
        • 自定义代码我可以提供更有意义的验证失败消息。
      3. 对我来说,当你的输入结构不高并且你没有可用的解析器时,ANTLR似乎具有很高的价值,但是在JSON的情况下它并没有给JSON解析器带来多少价值。

        ANTLR是否适合这种情况?

0 个答案:

没有答案