最近,我尝试了一些语法来修改
文件在这些测试案例中,我会保留很多
仅在此处和那里修改小块,请参见
this
复习问题以获取示例。
所以我需要一个(或几个)动作方法(即
语法)我将文件的修改部分附加到
使用其匹配对象
make方法。问题是语法本身会有更多
令牌/规则/正则表达式
嵌套。因此,需要传播(通过连续调用
make()
)小更改(当前附加到
令牌的匹配对象)直到
TOP()
action类中的方法
这样一切
文件中的else(所有其他令牌/规则/正则表达式)保持不变
在语法返回的结果中
.parse()
呼叫
因此,action类中的所有方法(除了一个)都是完全相同的形式:
method make-data ($match-data) {
$match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
现在,所有动作方法都显式重复相同的代码
对我来说非常冗长,也违背了干式编程的原则。
有没有办法告诉语法类如果一个动作方法
(对应于语法中的标记)是
未指定,它将默认为
make-data
上述方法(或类似方法)?
所以在这种情况下,我设想
DEFAULT()
action类中的方法:
method DEFAULT ($match-data) {
$match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
如果语法类中的标记没有
action类中的相应方法。