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

用 Perl5 构建 Grammar 的思索

发布时间:2020-12-15 23:44:04 所属栏目:大数据 来源:网络整理
导读:由于 Perl5 的字符串本身就是正则表达式的代码,而正则表达式中可以内嵌代码: $ use 5.020$ my $tokens = []$ my $token = qr/ ([w-]+) (?{push @$tokens,$+}) /xms$ my $top = qr/A (?: $token | s+)+ z/xms;$ 'hello world come-on' =~ / $top /xms$

由于 Perl5 的字符串本身就是正则表达式的代码,而正则表达式中可以内嵌代码:

$ use 5.020
$ my $tokens = []
$ my $token = qr/ ([w-]+) (?{push @$tokens,$+}) /xms
$ my $top = qr/A (?: $token | s+)+ z/xms;
$ 'hello world come-on' =~ / $top /xms
$ say @$tokens.join(' ');
hello world come-on

而如何生成数据结构呢?

一方面可以先生成 tokens,然后再生成数据结构,也可以用稍微复杂的办法直接生成数据结构:

用一个数据结构来代替 @tokens,可以向这个数据结构的一个数组子元素推送数据。

push-token($tokens,$element,$depth);

当 $depth == 1

push @token[-1],$element;

当 $depth == 2

push @token[-1][-1],$element;

要设计一个动态创建指定深度元素的函数:

create_depth_container($tokens,$depth);

my $data_expr = '$tokens' . '[-1]' x $depth ' = []';
## $tokens->[-1] = []; $tokens->[-1][-1] = [];

其中 $depth 代码嵌套的深度,而深度是由匹配特定的字符触发的:

/ ( (?{ $depth++ }) /xms
/ ) (?{ $depth-- }) /xms

这样就能推送出带嵌套的数据结构了

(编辑:李大同)

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

    推荐文章
      热点阅读