如果ANTLR4中不存在,则跳过值

时间:2018-05-31 09:18:22

标签: java parsing antlr4

我有一个我要解析的文件,在该文件中,有值依赖于其他值。例如,考虑这个文件

0,1,2,3,4,1,2,3,4,5,9,7,2,1,2

这里4表示接下来的4个数字是4个数字的序列。如果它是2那么将只有2个数字。同样适用于从最后一位排在第3位的2,它表示有2个数字。如果在这种情况下不存在这样的情况,如何编写跳过字段的语法,考虑到此序列的最大限制为8或10。

另一种情况是取决于值,有一些字段存在或不存在例如

1,2,3,52,5,8,6,9这里考虑52个状态,8个存在而6个不是那么系列将是1,2,3,52,5,8,9然后如何跳过此字段并解析其他字段。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我之前尝试在解析过程中验证输入,让我告诉你:这是一个完全混乱,很可能无法正常工作。
这是因为解析器应该完全这样做:解析输入。需要对已解析数据执行的所有验证都应在Listener或Visitor中执行,因此在解析文件之后。

因此,我强烈建议您从评论中关注@Bart Kiers的建议,并将整个事情解析为以逗号分隔的列表,并在解析后执行所有上下文相关的验证和分组。

编辑:
您声明您需要为CSV中找到的所有子序列分别设置(访问)方法。这可以通过基于分组算法的自定义walker- +监听器系统构建来实现。因此,您可以继续解析文件,然后将所有子序列组合在一起,并从中创建某种数据结构。然后,您将采用该结构并将其提供给自定义步行器,该自定义步行器又会向自定义侦听器通知某些遇到的子序列。