如何使用递归ANTLR4解析树监听器

时间:2018-05-04 02:56:02

标签: python json parsing recursion antlr4

我正在使用ANTLR4来解析结构化数据文件,似乎已经碰壁了。我知道这是一个非常具体的问题,但也许有人可以指出我正确的方向。

我正在解析看起来像这样的文件:

MSH
[  PD1  ]
[{ ROL }]
[
  { ROL }
]
[
    {
        PR1
        [{ ROL }]
    }
]
[
    {
        IN1
        [  IN2  ]
        [{ IN3 }]
    }
]
[ ACC ]

其中:

  • 3个单个字母数字代表SEGMENT
  • [SEGMENT]代表可选细分
  • {SEGMENT}代表重复段
  • [{SEGMENT}]代表一个可选的重复段
  • 上述任何SEGMENT配置文件都可以在嵌套中组合在一起 可选和/或重复组。
  • 嵌套重复组的示例是上面代码中的第4-19行。

我的ANTLR4 Lexer / Parser运行良好,产生以下Parse树:

Parse Tree

最终目标是使用上述规则将任何数据集转换为JSON格式。使用上面数据集文件中的一些行的示例:

{
  "MSH": {
    "name": "placeholder",
    "opt": false,
    "rep": false,
    "description": "Plain Segment"
  },
  "PD1": {
    "name": "placeholder",
    "opt": true,
    "rep": false,
    "description": "Optional Segment"
  },
  // some segments here
  "group": {
    "opt": true,
    "rep": false,
    "description": "Optionals group placeholder text",
    "segment0": {
      "ROL": {
        "name": "placeholder",
        "opt": false,
        "rep": true,
        "description": "Repeating Segment"
      }
    }
  }
}

我使用ANTLR4监听器生成了接近上述json的东西implemented here.但是它的嵌套组不断绊倒我,我发现很难用Listener做。也许另一组眼睛会有所帮助。

0 个答案:

没有答案