如何跳过"和"跳过规则?

时间:2016-10-21 10:48:36

标签: antlr antlr4 natty

我正在研究一种类似于nattys的新antlr语法,应该识别日期表达式,但是我对跳过规则有疑问。更详细地说,我想在表达式中忽略无用的"和"例如:

打电话给Sam,John和Adam,并在周一和周五与Sarah讨论财务问题。

前两个"和" s是无用的。我写了下面的规则来解决这个问题,但它没有用,为什么?我该怎么办?

    NW : [~WeekDay];
    UselessAnd : AND NW -> skip;

1 个答案:

答案 0 :(得分:4)

“无用的AND”是一种语义概念。

语法是关于语法的,并且很难处理语义问题。不要将这些结合在一起。

建议:当你为一种语言编写语法时,让你的解析器接受语言,疣和所有语言。在你的情况下,我建议你“收集”无用的AND。通过这种方式,您可以更轻松地获得语法“正确”,并且对于必须维护语法的下一个编码人员更加透明。

一旦你拥有AST,很容易忽略(语义上)无用的东西;如果没有别的,你可以后处理AST并删除无用的AND节点。