加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何为语法的动作类添加默认方法?

发布时间:2020-12-15 21:42:31 所属栏目:大数据 来源:网络整理
导读:最近,我尝试了一些语法修改a的小部分 文件.在那些测试用例中,我会保留很多 文件原样,只在这里和那里修改小块,看看 this回顾问题的一个例子. 所以我需要一个(或几个)动作方法(即动作类中的方法) 语法)我将文件的修改部分附加到 使用它匹配对象 制作方法.问题
最近,我尝试了一些语法修改a的小部分
文件.在那些测试用例中,我会保留很多
文件原样,只在这里和那里修改小块,看看
this回顾问题的一个例子.

所以我需要一个(或几个)动作方法(即动作类中的方法)
语法)我将文件的修改部分附加到
使用它匹配对象
制作方法.问题是语法本身会有更多
令牌/规则/正则表达式复杂
筑巢.因此,需要传播(通过相继呼叫
make())小变化(目前附加到
一个令牌的匹配对象)直到动作类中的TOP()方法
这样的一切
文件中的其他(所有其他令牌/规则/正则表达式)保持不变
在语法的.parse()调用返回的结果中.

因此,除了一个之外,动作类中的所有方法都采用完全相同的形式:

method make-data ($match-data) {
    $match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}

现在,似乎对所有动作方法显式重复相同的代码
对我来说非常冗长,也打破了DRY编程原则.

有没有办法告诉语法类,如果一个动作方法
(对应于语法中的标记)是
未指定,它将默认为上面的make-data方法(或类似的方法)?

所以在这种情况下,我设想动作类中的DEFAULT()方法:

method DEFAULT ($match-data) {
    $match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}

如果语法类中的标记没有,则调用
动作类中的相应方法.

解决方法

Perl 6的Type系统将调用 FALLBACK方法,如果它存在于类中并且进行了未知的方法调用.

以下解决方案将默认构造方法添加到Calculations操作类.

grammar Calculator {
    token TOP { [ <add> | <sub> ] }
    rule  add { <num> '+' <num> }
    rule  sub { <num> '-' <num> }
    token num { d+ }
}

class Calculations {
    method ws($) {}
    method FALLBACK($token,$match-data) {
        $match-data.make( [~] $match-data.chunks.map: {
            $_.value.?made // $_.value;
        } );
    }
}

say Calculator.parse('2 + 3',actions => Calculations).made;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读