代码之家  ›  专栏  ›  技术社区  ›  cahuson

优先与可选的足够

  •  0
  • cahuson  · 技术社区  · 7 年前

    simple1
    : simple1 K_AND simple1
    | simple1 K_BUT K_NOT simple1
    | simple1 K_OR simple1
    | WHOLE_NUMBER
    ;
    

    这就产生了适当的优先权( AND BUT NOT 结束 OR .)

    good precedence

    如果我们在AND case中添加一个可选后缀:

    simple1
        : simple1 K_AND simple1 filt?
        | simple1 K_BUT K_NOT simple1
        | simple1 K_OR simple1
        | WHOLE_NUMBER
    ;
    
    filt : K_PM;
    

    lost precedence

    有没有办法在一条规则中做到这一点?我们以前的解决方案是将和选项分离为一个单独的规则。

    0 回复  |  直到 7 年前
        1
  •  1
  •   cahuson    7 年前

    我们想出了一个简单的答案:

    simple1:
          simple1 K_AND simple1 filt
        | simple1 K_AND simple1
        | simple1 K_BUT K_NOT simple1
        | simple1 K_OR simple1
        | WHOLE_NUMBER
    ;
    
    filt : K_PM;
    

    保持优先规则正确。