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

我能以某种方式对类似的子规则进行语法分析吗?

  •  0
  • Petruza  · 技术社区  · 6 年前

    这些规则目前有效,所以 filler_stmt 匹配字符串 filler 后跟十六进制、十进制或二进制数。

    filler_stmt: FILLER_KWD fb=filler_byte {self.set_filler( $fb.ret )};
    filler_byte returns [ret]
        : hex {$ret = $hex.ret}
        | dec {$ret = $dec.ret}
        | bin {$ret = $bin.ret}
        ;
    

    当我计划向规则中添加更多类型时,我想知道是否有某种方式可以避免将传递子规则返回值的行为写入父规则,这些规则都是相同的。
    所以尝试:

    filler_byte returns [ret] value=(
          hex
        | dec
        | bin
        ) {$ret = $value};
    

    但收到以下错误消息: label value assigned to a block which is not a set

    有没有办法达到这个目的,或者每个子规则都必须有自己的行动?

    0 回复  |  直到 6 年前