用 Perl5 构建 Grammar 的思索

用 Perl5 构建 Grammar 的思索,第1张

概述由于 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' =~ /

由于 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

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

总结

以上是内存溢出为你收集整理的用 Perl5 构建 Grammar 的思索全部内容,希望文章能够帮你解决用 Perl5 构建 Grammar 的思索所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存