我正在尝试根据上下文修改规则,并尽可能少地复制/粘贴。我最好从我想要实现的伪代码变体开始:
module[boolean isParam]: 'module' id=identity?
declaration+
update+
'endmodule' -> ^(MODULE ({if (isParam)} IS_PARAMETER {else} $id) declaration+ update+);
如果isParam
设置了,我希望模块不匹配identity
规则,但在其位置创建一个IS_PARAMETER
令牌。我确信我可以使用两个单独module
的规则来做到这一点,但是有没有一种更简洁的方法,代码重复更少,或者没有将module
规则拆分为多个较小的规则?