Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在研究一种类似于 nattys 并且应该识别日期表达式的新 antlr 语法,但我对跳过规则有疑问。更详细地说,我想忽略表达式中无用的“和”,例如:
打电话给山姆、约翰和亚当,安排在周一和周五与莎拉就财务问题进行一次会议。
前两个“and”没有用。我写了下面的规则来解决这个问题,但它没有用,为什么?我应该怎么办?
NW : [~WeekDay]; UselessAnd : AND NW -> skip;
“无用的AND”是一个语义概念。
语法是关于语法的,并且处理语义问题很差。不要将这些结合在一起。
建议:当你为一种语言编写语法时,让你的解析器按原样接受语言,疣和所有。在您的情况下,我建议您“收集”无用的 AND。这样,您可以更轻松地使语法“正确”,并且对下一个必须维护您的语法的编码员更透明。
一旦你有了 AST,就很容易忽略(语义上)无用的东西;如果不出意外,您可以对 AST 进行后处理并删除无用的 AND 节点。