我正在研究一种类似于nattys的新antlr语法,应该识别日期表达式,但是我对跳过规则有疑问。更详细地说,我想在表达式中忽略无用的"和"例如:
打电话给Sam,John和Adam,并在周一和周五与Sarah讨论财务问题。
前两个"和" s是无用的。我写了下面的规则来解决这个问题,但它没有用,为什么?我该怎么办?
NW : [~WeekDay];
UselessAnd : AND NW -> skip;
答案 0 :(得分:4)
“无用的AND”是一种语义概念。
语法是关于语法的,并且很难处理语义问题。不要将这些结合在一起。
建议:当你为一种语言编写语法时,让你的解析器接受语言,疣和所有语言。在你的情况下,我建议你“收集”无用的AND。通过这种方式,您可以更轻松地获得语法“正确”,并且对于必须维护语法的下一个编码人员更加透明。
一旦你拥有AST,很容易忽略(语义上)无用的东西;如果没有别的,你可以后处理AST并删除无用的AND节点。