File: demo_flattening.pl

package info (click to toggle)
libregexp-grammars-perl 1.058-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,328 kB
  • sloc: perl: 53,328; makefile: 2
file content (48 lines) | stat: -rw-r--r-- 1,086 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use v5.10;
use warnings;

my $grammar_unflattened = do {
    use Regexp::Grammars;
    qr{
        mv  \s* <from> \s*   <to>

        <rule: from>       <file>
        <rule: to>         <file>

        <rule: file>       <dirpath>? <filename>

        <token: dirpath>   /? (?: [\w.-]+ / )+
        <token: filename>  [\w.-]+
    }xms;
};

my $grammar_flattened = do {
    use Regexp::Grammars;
    qr{
        mv  \s* <from> \s*   <to>

        <rule: from>       <MATCH=file>
        <rule: to>         <MATCH=file>

        <rule: file>       <dirpath>? <filename>
                           (?{ $MATCH = ($MATCH{dirpath}//q{})
                                      .  $MATCH{filename}
                           })

        <token: dirpath>   /? (?: [\w.-]+ / )+
        <token: filename>  [\w.-]+
    }xms;
};

while (my $line = <>) {
    my $line_copy = $line;
    if ($line =~ $grammar_unflattened) {
        use Data::Dumper 'Dumper';
        say Dumper \%/;
    }

    if ($line_copy =~ $grammar_flattened) {
        use Data::Dumper 'Dumper';
        say Dumper \%/;
    }
}