2

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

打电话给山姆、约翰和亚当,安排在周一和周五与莎拉就财务问题进行一次会议。

前两个“and”没有用。我写了下面的规则来解决这个问题,但它没有用,为什么?我应该怎么办?

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

1 回答 1

4

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

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

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

一旦你有了 AST,就很容易忽略(语义上)无用的东西;如果不出意外,您可以对 AST 进行后处理并删除无用的 AND 节点。

于 2016-10-21T13:44:30.290 回答