Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Tree-DAG_Node for 
openSUSE:Factory checked in at 2025-05-26 18:36:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new.2732 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Tree-DAG_Node"

Mon May 26 18:36:01 2025 rev:29 rq:1279821 version:1.350.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node/perl-Tree-DAG_Node.changes    
2025-04-27 22:54:29.980649080 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new.2732/perl-Tree-DAG_Node.changes
  2025-05-26 18:37:46.085048115 +0200
@@ -1,0 +2,43 @@
+Tue May 13 05:37:11 UTC 2025 - Tina Müller <timueller+p...@suse.de>
+
+- updated to 1.350.0 (1.35)
+   see /usr/share/doc/packages/perl-Tree-DAG_Node/Changelog.ini
+
+  [V 1.35]
+  Date=2025-05-12T17:00:00
+  Comments= <<EOT
+  - Change sub hashref2string() line 726 so it does not generate an error or 
warning when
+  the node or node name is '' (empty string), undef or 0 (zero).
+  - Change test data so that when stringifying a tree, node names without 
attributes are
+  output as (e.g.) 'lexeme: Attributes{}' rather than as just 'lexeme'. This 
was alleged
+  to have been done as per the last dot point under v 1.34 below, but was not 
done properly.
+  - This last point also affects the related module Data::RenderAsTree, which 
ships with a
+  range of test programs and sample scripts which futher exercise these 
features.
+  The point of these latter samples is so you can use them without having to 
fiddle about
+  removing the test code in the corresponding test scripts.
+  EOT
+
+  [V 1.34]
+  Date=2025-04-23T17:01:00
+  Comments= <<EOT
+  - Thanx to Shawn Laffan for reporting a problem with line-endings in files 
read and written,
+  by both Tree::DAG_Node and t/read.tree.t, when he tests under Strawberry 
Perl.
+  - The 2 test files t/tree.with*.txt ship as ISO-8859-1 while 
t/tree.utf8.attributes.txt ships
+  as UTF-8. So...
+  - Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). 
Rather, use a regexp
+  to standardize line endings after reading. Likewise, in t/read.tree.t, do 
the same.
+  - I have un-commented the 2 extra tests at the end of t/read.tree.t. 
Specifically,
+  line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for (qw/utf8 with 
without/)'
+  - Reformat test data files t/tree.*.attributes.txt
+  This was done with the new files share/read.write.tree.(pl, sh).
+  And it was done because some of the test data files had been written
+  by old code with slightly different indenting.
+  - Add a new test data file, t/metag.cooked.tree.txt
+  It's a copy of MarpaX::Grammar::Parser's share/metag.cooked.tree.
+  The test program t/read.tree.t was edited to include this new file.
+  - Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not just 
'Attributes:'
+  when the user does not want attributes reported. This makes the code match 
the sample
+  trees shipped in t/.
+  EOT
+
+-------------------------------------------------------------------

Old:
----
  Tree-DAG_Node-1.33.tgz

New:
----
  Tree-DAG_Node-1.35.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Tree-DAG_Node.spec ++++++
--- /var/tmp/diff_new_pack.tECZlT/_old  2025-05-26 18:37:46.705074144 +0200
+++ /var/tmp/diff_new_pack.tECZlT/_new  2025-05-26 18:37:46.709074312 +0200
@@ -18,10 +18,10 @@
 
 %define cpan_name Tree-DAG_Node
 Name:           perl-Tree-DAG_Node
-Version:        1.330.0
+Version:        1.350.0
 Release:        0
-# 1.33 -> normalize -> 1.330.0
-%define cpan_version 1.33
+# 1.35 -> normalize -> 1.350.0
+%define cpan_version 1.35
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        An N-ary tree
 URL:            https://metacpan.org/release/%{cpan_name}
@@ -53,6 +53,8 @@
 %prep
 %autosetup  -n %{cpan_name}-%{cpan_version} -p1
 
+find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path 
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 
644
+
 %build
 perl Makefile.PL INSTALLDIRS=vendor
 %make_build

++++++ Tree-DAG_Node-1.33.tgz -> Tree-DAG_Node-1.35.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/Changelog.ini 
new/Tree-DAG_Node-1.35/Changelog.ini
--- old/Tree-DAG_Node-1.33/Changelog.ini        2025-03-30 03:06:30.000000000 
+0200
+++ new/Tree-DAG_Node-1.35/Changelog.ini        2025-05-12 09:11:59.000000000 
+0200
@@ -3,6 +3,43 @@
 Changelog.Creator=Module::Metadata::Changes V 2.12
 Changelog.Parser=Config::IniFiles V 3.000003
 
+[V 1.35]
+Date=2025-05-12T17:00:00
+Comments= <<EOT
+- Change sub hashref2string() line 726 so it does not generate an error or 
warning when
+the node or node name is '' (empty string), undef or 0 (zero).
+- Change test data so that when stringifying a tree, node names without 
attributes are
+output as (e.g.) 'lexeme: Attributes{}' rather than as just 'lexeme'. This was 
alleged
+to have been done as per the last dot point under v 1.34 below, but was not 
done properly.
+- This last point also affects the related module Data::RenderAsTree, which 
ships with a
+range of test programs and sample scripts which futher exercise these features.
+The point of these latter samples is so you can use them without having to 
fiddle about
+removing the test code in the corresponding test scripts.
+EOT
+
+[V 1.34]
+Date=2025-04-23T17:01:00
+Comments= <<EOT
+- Thanx to Shawn Laffan for reporting a problem with line-endings in files 
read and written,
+by both Tree::DAG_Node and t/read.tree.t, when he tests under Strawberry Perl.
+- The 2 test files t/tree.with*.txt ship as ISO-8859-1 while 
t/tree.utf8.attributes.txt ships
+as UTF-8. So...
+- Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). 
Rather, use a regexp
+to standardize line endings after reading. Likewise, in t/read.tree.t, do the 
same.
+- I have un-commented the 2 extra tests at the end of t/read.tree.t. 
Specifically,
+line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for (qw/utf8 with 
without/)'
+- Reformat test data files t/tree.*.attributes.txt
+This was done with the new files share/read.write.tree.(pl, sh).
+And it was done because some of the test data files had been written
+by old code with slightly different indenting.
+- Add a new test data file, t/metag.cooked.tree.txt
+It's a copy of MarpaX::Grammar::Parser's share/metag.cooked.tree.
+The test program t/read.tree.t was edited to include this new file.
+- Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not just 
'Attributes:'
+when the user does not want attributes reported. This makes the code match the 
sample
+trees shipped in t/.
+EOT
+
 [V 1.33]
 Date=2025-03-20T11:16:00
 Deploy.Action=Upgrade
@@ -74,7 +111,7 @@
 'use Tree::DAG_Node'. That's no good when code is expecting a different 
encoding
 (raw, etc.)". See RT#105798. Karen Etheridge followed up with a comment about 
it appearing
 in another module of mine. Then I checked all my modules (including some not 
intended for
-publication - Local::*) and found about 28 offenders, with some using it inn 
multiple files.
+publication - Local::*) and found about 28 offenders, with some using it in 
multiple files.
 The original idea came from adopting what Tom Christiansen calls his 'Standard 
Preamble':
 http://www.perl.com/pub/2012/04/perlunicook-standard-preamble.html
 All tests still work after removing that line.
@@ -210,7 +247,7 @@
 - Add method read_tree(), for text files. It uses Perl6::Slurp (which supports 
utf8).
 - Add methods read_attributes() and string2hashref($s) for use by read_tree().
 - Add t/read.tree.t to test read_tree().
-- Add t/tree.utf8.attrbiutes.txt, in utf8, for use by t/read.tree.t.
+- Add t/tree.utf8.attributes.txt, in utf8, for use by t/read.tree.t.
 - Add t/tree.with.attributes.txt and t/tree.without.attributes.txt for use by 
t/read.tree.t.
 - Make Perl V 5.8.1 a pre-req so we have access to the utf8 pragma.
 EOT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/Changes 
new/Tree-DAG_Node-1.35/Changes
--- old/Tree-DAG_Node-1.33/Changes      2025-03-30 03:03:19.000000000 +0200
+++ new/Tree-DAG_Node-1.35/Changes      2025-05-12 09:09:08.000000000 +0200
@@ -1,5 +1,36 @@
 Revision history for Perl module Tree::DAG_Node.
 
+1.35  2025-05-12T17:00:00
+       - Change sub hashref2string() line 726 so it does not generate an error 
or warning when
+               the node or node name is '' (empty string), undef or 0 (zero).
+       - Change test data so that when stringifying a tree, node names without 
attributes are
+               output as (e.g.) 'lexeme: Attributes{}' rather than as just 
'lexeme'. This was alleged
+               to have been done as per the last dot point under v 1.34 below, 
but was not done properly.
+       - This last point also affects the related module Data::RenderAsTree, 
which ships with a
+               range of test programs and sample scripts which futher exercise 
these features.
+               The point of these latter samples is so you can use them 
without having to fiddle about
+               removing the test code in the corresponding test scripts.
+
+1.34  2025-04-23T17:01:00
+       - Thanx to Shawn Laffan for reporting a problem with line-endings in 
files read and written,
+               by both Tree::DAG_Node and t/read.tree.t, when he tests under 
Strawberry Perl.
+       - The 2 test files t/tree.with*.txt ship as ISO-8859-1 while 
t/tree.utf8.attributes.txt ships
+               as UTF-8. So...
+       - Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). 
Rather, use a regexp
+               to standardize line endings after reading. Likewise, in 
t/read.tree.t, do the same.
+       - I have un-commented the 2 extra tests at the end of t/read.tree.t. 
Specifically,
+               line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for 
(qw/utf8 with without/)'
+       - Reformat test data files t/tree.*.attributes.txt
+               This was done with the new files share/read.write.tree.(pl, sh).
+               And it was done because some of the test data files had been 
written
+               by old code with slightly different indenting.
+       - Add a new test data file, t/metag.cooked.tree.txt
+               It's a copy of MarpaX::Grammar::Parser's 
share/metag.cooked.tree.
+               The test program t/read.tree.t was edited to include this new 
file.
+       - Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not 
just 'Attributes:'
+               when the user does not want attributes reported. This makes the 
code match the sample
+               trees shipped in t/.
+
 1.33  2025-03-20T11:16:00
        - Replace the discouraged File::Slurp::Tiny with File::Slurper.
                Thanx to Marcel Telka for the report.
@@ -52,7 +83,7 @@
                'use Tree::DAG_Node'. That's no good when code is expecting a 
different encoding
                (raw, etc.)". See RT#105798. Karen Etheridge followed up with a 
comment about it appearing
                in another module of mine. Then I checked all my modules 
(including some not intended for
-               publication - Local::*) and found about 28 offenders, with some 
using it inn multiple files.
+               publication - Local::*) and found about 28 offenders, with some 
using it in multiple files.
                The original idea came from adopting what Tom Christiansen 
calls his 'Standard Preamble':
                
http://www.perl.com/pub/2012/04/perlunicook-standard-preamble.html
                All tests still work after removing that line.
@@ -157,7 +188,7 @@
        - Add method read_tree(), for text files. It uses Perl6::Slurp (which 
supports utf8).
        - Add methods read_attributes() and string2hashref($s) for use by 
read_tree().
        - Add t/read.tree.t to test read_tree().
-       - Add t/tree.utf8.attrbiutes.txt, in utf8, for use by t/read.tree.t.
+       - Add t/tree.utf8.attributes.txt, in utf8, for use by t/read.tree.t.
        - Add t/tree.with.attributes.txt and t/tree.without.attributes.txt for 
use by t/read.tree.t.
        - Make Perl V 5.8.1 a pre-req so we have access to the utf8 pragma.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/MANIFEST 
new/Tree-DAG_Node-1.35/MANIFEST
--- old/Tree-DAG_Node-1.33/MANIFEST     2025-03-30 03:06:31.000000000 +0200
+++ new/Tree-DAG_Node-1.35/MANIFEST     2025-05-12 09:12:00.000000000 +0200
@@ -9,13 +9,19 @@
 scripts/cut.and.paste.subtrees.pl
 scripts/read.tree.log
 scripts/read.tree.pl
+scripts/read.write.tree.pl
+scripts/read.write.tree.sh
 scripts/write.tree.pl
 SECURITY.md
+share/metag.bnf
+share/metag.cooked.tree
+share/metag.cooked.tree.new
 t/00.versions.t
 t/00.versions.tx
 t/about.perl.t
 t/cut.and.paste.subtrees.t
 t/load.t
+t/metag.cooked.tree.txt
 t/read.tree.t
 t/string2hash.t
 t/tree.utf8.attributes.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/META.json 
new/Tree-DAG_Node-1.35/META.json
--- old/Tree-DAG_Node-1.33/META.json    2025-03-30 03:06:31.000000000 +0200
+++ new/Tree-DAG_Node-1.35/META.json    2025-05-12 09:12:00.000000000 +0200
@@ -67,6 +67,6 @@
          "web" : "https://github.com/ronsavage/Tree-DAG_Node";
       }
    },
-   "version" : "1.33",
+   "version" : "1.35",
    "x_serialization_backend" : "JSON::PP version 4.16"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/META.yml 
new/Tree-DAG_Node-1.35/META.yml
--- old/Tree-DAG_Node-1.33/META.yml     2025-03-30 03:06:31.000000000 +0200
+++ new/Tree-DAG_Node-1.35/META.yml     2025-05-12 09:12:00.000000000 +0200
@@ -31,5 +31,5 @@
   bugtracker: https://github.com/ronsavage/Tree-DAG_Node/issues
   license: http://opensource.org/licenses/Artistic-2.0
   repository: https://github.com/ronsavage/Tree-DAG_Node.git
-version: '1.33'
+version: '1.35'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/lib/Tree/DAG_Node.pm 
new/Tree-DAG_Node-1.35/lib/Tree/DAG_Node.pm
--- old/Tree-DAG_Node-1.33/lib/Tree/DAG_Node.pm 2025-03-30 01:58:57.000000000 
+0100
+++ new/Tree-DAG_Node-1.35/lib/Tree/DAG_Node.pm 2025-05-12 08:52:39.000000000 
+0200
@@ -5,7 +5,7 @@
 use warnings qw(FATAL utf8); # Fatalize encoding glitches.
 
 our $Debug   = 0;
-our $VERSION = '1.33';
+our $VERSION = '1.35';
 
 use File::Slurper 'read_lines';
 
@@ -688,7 +688,7 @@
 {
        my($self, $options, $node) = @_;
        my($s) = $node -> name;
-       $s     .= '. Attributes: ' . $self -> hashref2string($node -> 
attributes) if (! $$options{no_attributes});
+       $s     .= $$options{no_attributes} ? '. Attributes: {}' : '. 
Attributes: ' . $self -> hashref2string($node -> attributes);
 
        return $s;
 
@@ -723,7 +723,7 @@
        my($self, $hashref) = @_;
        $hashref ||= {};
 
-       return '{' . join(', ', map{qq|$_ => "$$hashref{$_}"|} sort keys 
%$hashref) . '}';
+       return '{' . join(', ', map{$_ = 'undef' if (! defined($_) ); 
$$hashref{$_} = 'undef' if (! defined($$hashref{$_}) ); qq|$_ => 
"$$hashref{$_}"|} sort keys %$hashref) . '}';
 
 } # End of hashref2string.
 
@@ -1113,8 +1113,12 @@
        my(@stack);
        my($tos);
 
-       for my $line (read_lines($file_name, 'UTF-8', 0) )
+       for my $line (read_lines($file_name) )
        {
+               # Ensure inter-OS compatability.
+
+               $line =~ s/\r$//g;
+
                $count++;
 
                if ($count == 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.tree.pl 
new/Tree-DAG_Node-1.35/scripts/read.tree.pl
--- old/Tree-DAG_Node-1.33/scripts/read.tree.pl 2025-03-30 01:58:57.000000000 
+0100
+++ new/Tree-DAG_Node-1.35/scripts/read.tree.pl 2025-04-24 07:38:03.000000000 
+0200
@@ -3,7 +3,6 @@
 use strict;
 use warnings;
 use warnings qw(FATAL utf8); # Fatalize encoding glitches.
-use open     qw(:std :utf8); # Undeclared streams in UTF-8.
 
 use File::Spec;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.write.tree.pl 
new/Tree-DAG_Node-1.35/scripts/read.write.tree.pl
--- old/Tree-DAG_Node-1.33/scripts/read.write.tree.pl   1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.35/scripts/read.write.tree.pl   2025-04-26 
10:02:22.000000000 +0200
@@ -0,0 +1,62 @@
+#!/usr/bin/env perl
+#
+# Name: read.write.tree.pl.
+#
+# Called by read.write.tree.sh.
+#
+# Reads a tree created by Tree::DAG_Node.tree2string()
+# and somehow written to a disk file.
+
+use 5.40.0;
+
+use strict;
+use warnings;
+use warnings qw(FATAL utf8); # Fatalize encoding glitches.
+
+use Data::Dumper; # For Dumper().
+
+use File::Spec;
+
+use Getopt::Long;
+
+use Tree::DAG_Node;
+
+# ------------------------------------------------
+
+my(%options);
+
+$options{dir_name}                     = '';
+$options{in_file_name}         = '';
+$options{help}                         = 0;
+$options{log_level}                    = 'info';
+my(%opts)                                      =
+(
+       'dir_name=s'            => \$options{dir_name},
+       'in_file_name=s'        => \$options{in_file_name},
+       'help'                          => \$options{help},
+       'log_level=s'           => \$options{log_level},
+);
+
+GetOptions(%opts) || die("Error in options. Options: " . Dumper(%opts) );
+
+if ($options{help} == 1)
+{
+       pod2usage(1);
+}
+
+my($input_file_name)   = File::Spec -> catfile($options{dir_name}, 
$options{in_file_name});
+my($output_file_name)  = File::Spec -> catfile($options{dir_name}, 
$options{in_file_name} . '.new');
+
+say "Reading: $input_file_name";
+
+my($node)                              = Tree::DAG_Node -> new;
+my($root)                              = $node -> read_tree($input_file_name);
+my($no_attr)                   = 0;
+
+say "Writing: $output_file_name";
+
+open(my $fh, '> :encoding(utf-8)', $output_file_name);
+print $fh "$_\n" for @{$root -> tree2string({no_attributes => $no_attr})};
+close $fh;
+
+say "Wrote:   $output_file_name";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.write.tree.sh 
new/Tree-DAG_Node-1.35/scripts/read.write.tree.sh
--- old/Tree-DAG_Node-1.33/scripts/read.write.tree.sh   1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.35/scripts/read.write.tree.sh   2025-04-25 
05:10:44.000000000 +0200
@@ -0,0 +1,10 @@
+#!/usr/bin/bash
+#
+# Name: read.write.tree.sh.
+#
+# Parameters:
+# 1: The abbreviated name of sample input and output data files.
+#      E.g. xyz simultaneously means read some_dir/xyz.tree and write 
some_dir/xyz.tree.out.
+# 2 .. 5: Use for anything. E.g.: -maxlevel debug.
+
+perl -Ilib scripts/read.write.tree.pl $1 $2 $3 $4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/write.tree.pl 
new/Tree-DAG_Node-1.35/scripts/write.tree.pl
--- old/Tree-DAG_Node-1.33/scripts/write.tree.pl        2025-03-30 
01:58:57.000000000 +0100
+++ new/Tree-DAG_Node-1.35/scripts/write.tree.pl        2025-04-24 
09:30:21.000000000 +0200
@@ -3,7 +3,6 @@
 use strict;
 use warnings;
 use warnings qw(FATAL utf8); # Fatalize encoding glitches.
-use open     qw(:std :utf8); # Undeclared streams in UTF-8.
 use utf8;
 
 use File::Slurper 'write_text';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.bnf 
new/Tree-DAG_Node-1.35/share/metag.bnf
--- old/Tree-DAG_Node-1.33/share/metag.bnf      1970-01-01 01:00:00.000000000 
+0100
+++ new/Tree-DAG_Node-1.35/share/metag.bnf      2025-04-25 05:39:53.000000000 
+0200
@@ -0,0 +1,210 @@
+# Copyright 2022 Jeffrey Kegler
+# This file is part of Marpa::R2.  Marpa::R2 is free software: you can
+# redistribute it and/or modify it under the terms of the GNU Lesser
+# General Public License as published by the Free Software Foundation,
+# either version 3 of the License, or (at your option) any later version.
+#
+# Marpa::R2 is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser
+# General Public License along with Marpa::R2.  If not, see
+# http://www.gnu.org/licenses/.
+
+:default ::= action => [start,length,values] bless => ::lhs
+lexeme default =
+  action => [start,length,value]
+  bless => ::name
+  forgiving => 1
+
+:start ::= statements
+statements ::= statement+
+statement ::= <start rule> | <empty rule>
+  | <null statement> | <statement group>
+  | <priority rule> | <quantified rule>
+  | <discard rule> | <default rule>
+  | <lexeme default statement>
+  | <discard default statement>
+  | <lexeme rule>
+  | <completion event declaration>
+  | <nulled event declaration>
+  | <prediction event declaration>
+  | <current lexer statement>
+  | <inaccessible statement>
+
+<null statement> ::= ';'
+<statement group> ::= ('{') statements '}'
+<start rule> ::= (':start' <op declare bnf>) symbol
+<start rule> ::= ('start' 'symbol' 'is') symbol
+<default rule> ::= ':default' <op declare bnf> <adverb list>
+<lexeme default statement> ::= ('lexeme' 'default' '=') <adverb list>
+<discard default statement> ::= ('discard' 'default' '=') <adverb list>
+<priority rule> ::= lhs <op declare> priorities
+<empty rule> ::= lhs <op declare> <adverb list>
+<quantified rule> ::= lhs <op declare> <single symbol> quantifier <adverb list>
+<discard rule> ::= (':discard' <op declare match>) <single symbol> <adverb 
list>
+<lexeme rule> ::= (':lexeme' <op declare match>) symbol <adverb list>
+<completion event declaration> ::= ('event') <event initialization> ('=' 
'completed') <symbol name>
+<nulled event declaration> ::= ('event') <event initialization> ('=' 'nulled') 
<symbol name>
+<prediction event declaration> ::= ('event') <event initialization> ('=' 
'predicted') <symbol name>
+<current lexer statement> ::= ('current' 'lexer' 'is') <lexer name>
+
+<inaccessible statement> ::= ('inaccessible' 'is') <inaccessible treatment> 
('by' 'default')
+<inaccessible treatment> ::= 'warn' | 'ok' | 'fatal'
+
+<op declare> ::= <op declare bnf> | <op declare match>
+priorities ::= alternatives+
+    separator => <op loosen> proper => 1
+alternatives ::= alternative+
+    separator => <op equal priority> proper => 1
+alternative ::= rhs <adverb list>
+
+<adverb list> ::= <adverb list items>
+<adverb list items> ::= <adverb item>*
+<adverb item> ::=
+      action
+    | <left association> | <right association> | <group association>
+    | <separator specification> | <proper specification>
+    | <rank specification> | <null ranking specification>
+    | <priority specification> | <pause specification> | <event specification>
+    | <latm specification> | blessing | naming | <null adverb>
+
+<null adverb> ::= ','
+action ::= ('action' '=>') <action name>
+<left association> ::= ('assoc' '=>' 'left')
+<right association> ::= ('assoc' '=>' 'right')
+<group association> ::= ('assoc' '=>' 'group')
+<separator specification> ::= ('separator' '=>') <single symbol>
+<proper specification> ::= ('proper' '=>') boolean
+<rank specification> ::= ('rank' '=>') <signed integer>
+<null ranking specification> ::= ('null-ranking' '=>') <null ranking constant>
+<null ranking specification> ::= ('null' 'rank' '=>') <null ranking constant>
+<null ranking constant> ::= 'low' | 'high'
+<priority specification> ::= ('priority' '=>') <signed integer>
+<pause specification> ::= ('pause' '=>') <before or after>
+
+<event specification> ::= ('event' '=>') <event initialization>
+<event initialization> ::= <event name> <event initializer>
+<event initializer> ::= ('=') <on or off>
+<on or off> ::= 'on' | 'off'
+<event initializer> ::= # empty
+
+<latm specification> ::= ('forgiving' '=>') boolean
+<latm specification> ::= ('latm' '=>') boolean
+<blessing> ::= ('bless' '=>') <blessing name>
+<naming> ::= ('name' '=>') <alternative name>
+
+<alternative name> ::= <standard name> | <single quoted name>
+<lexer name> ::= <standard name> | <single quoted name>
+
+<event name> ::= <standard name>
+    | <single quoted name>
+    | <reserved event name>
+<reserved event name> ~ ':symbol'
+
+<blessing name> ::= <standard name>
+<blessing name> ::= <reserved blessing name>
+
+lhs ::= <symbol name>
+rhs ::= <rhs primary>+
+<rhs primary> ::= <single symbol>
+<rhs primary> ::= <single quoted string>
+<rhs primary> ::= <parenthesized rhs primary list>
+<parenthesized rhs primary list> ::= ('(') <rhs primary list> (')')
+<rhs primary list> ::= <rhs primary>+
+<single symbol> ::=
+    symbol
+  | <character class>
+symbol ::= <symbol name>
+<symbol name> ::= <bare name>
+<symbol name> ::= <bracketed name>
+<action name> ::= <Perl name>
+<action name> ::= <reserved action name>
+<action name> ::= <array descriptor>
+
+:discard ~ whitespace
+whitespace ~ [\s]+
+
+# allow comments
+:discard ~ <hash comment>
+<hash comment> ~ <terminated hash comment> | <unterminated
+   final hash comment>
+<terminated hash comment> ~ '#' <hash comment body> <vertical space char>
+<unterminated final hash comment> ~ '#' <hash comment body>
+<hash comment body> ~ <hash comment char>*
+<vertical space char> ~ [\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}]
+<hash comment char> ~ [^\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}]
+
+<op declare bnf> ~ '::='
+<op declare match> ~ '~'
+<op loosen> ~ '||'
+<op equal priority> ~ '|'
+quantifier ::= '*' | '+'
+<before or after> ~ 'before' | 'after'
+
+<signed integer> ~ <integer> | <sign> <integer>
+<sign> ~ [+-]
+<integer> ~ [\d]+
+
+boolean ~ [01]
+
+<reserved action name> ~ '::' <one or more word characters>
+<reserved blessing name> ~ '::' <one or more word characters>
+<one or more word characters> ~ [\w]+
+<zero or more word characters> ~ [\w]*
+
+# Perl identifiers allow an initial digit, which makes them slightly more 
liberal than Perl bare names
+# but equivalent to Perl names with sigils.
+<Perl identifier> ~ [\w]+
+<double colon> ~ '::'
+<Perl name> ~ <Perl identifier>+ separator => <double colon> proper => 1
+
+<bare name> ~ [\w]+
+<standard name> ~ [a-zA-Z] <zero or more word characters>
+<bracketed name> ~ '<' <bracketed name string> '>'
+<bracketed name string> ~ [\s\w]+
+
+<array descriptor> ~ <array descriptor left bracket> <result item descriptor 
list> <array descriptor right bracket>
+<array descriptor left bracket> ~ '['
+<array descriptor left bracket> ~ '[' whitespace
+<array descriptor right bracket> ~ ']'
+<array descriptor right bracket> ~ whitespace ']'
+<result item descriptor list> ~ <result item descriptor>* separator => <result 
item descriptor separator>
+<result item descriptor separator> ~ [,]
+<result item descriptor separator> ~ [,] whitespace
+<result item descriptor> ~ 'start' | 'length'
+  | 'g1start' | 'g1length'
+  | 'name' | 'lhs' | 'symbol' | 'rule'
+  | 'value' | 'values'
+
+# In single quoted strings and character classes
+# no escaping or internal newlines, and disallow empty string
+
+<single quoted string> ~ ['] <string without single quote or vertical space> 
['] <character class modifiers>
+<single quoted name> ~ ['] <string without single quote or vertical space> [']
+<string without single quote or vertical space> ~ 
[^'\x{0A}\x{0B}\x{0C}\x{0D}\x{0085}\x{2028}\x{2029}]+
+
+<character class> ~ '[' <cc elements> ']' <character class modifiers>
+<cc elements> ~ <cc element>+
+<cc element> ~ <safe cc character>
+# hex 5d is right square bracket
+<safe cc character> ~ [^\x{5d}\x{0A}\x{0B}\x{0C}\x{0D}\x{0085}\x{2028}\x{2029}]
+<cc element> ~ <escaped cc character>
+<escaped cc character> ~ '\' <horizontal character>
+<cc element> ~ <posix char class>
+<cc element> ~ <negated posix char class>
+<character class modifiers> ~ <character class modifier>*
+<character class modifier> ~ ':ic'
+<character class modifier> ~ ':i'
+
+# [=xyz=] and [.xyz.] are parsed by Perl, but then currently cause an 
exception.
+# Catching Perl exceptions is inconvenient for Marpa,
+# so we reject them syntactically instead.
+<posix char class> ~ '[:' <posix char class name> ':]'
+<negated posix char class> ~ '[:^' <posix char class name> ':]'
+<posix char class name> ~ [[:alnum:]]+
+
+# a horizontal character is any character that is not vertical space
+<horizontal character> ~ [^\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.cooked.tree 
new/Tree-DAG_Node-1.35/share/metag.cooked.tree
--- old/Tree-DAG_Node-1.33/share/metag.cooked.tree      1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.35/share/metag.cooked.tree      2025-04-25 
05:15:33.000000000 +0200
@@ -0,0 +1,130 @@
+Cooked tree. Attributes: {rule => "", uid => "1"}
+    |--- statements. Attributes: {rule => "1", uid => "2"}
+    |--- default_rule. Attributes: {rule => "1", uid => "3"}
+    |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"}
+    |--- start_rule. Attributes: {rule => "1", uid => "5"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "6"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "7"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "8"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "9"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "10"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "11"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "12"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "13"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "14"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "15"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "16"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "17"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "18"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "19"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "20"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "21"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "22"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "23"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "24"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "25"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "26"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "27"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "28"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "29"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "30"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "31"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "32"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "33"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "34"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "35"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "36"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "37"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "38"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "39"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "40"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "41"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "42"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "43"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "44"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "45"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "46"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "47"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "48"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "49"}
+    |--- lhs. Attributes: {rule => "1", uid => "50"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "51"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "52"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "53"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "54"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "55"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "56"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "57"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "58"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "59"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "60"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "61"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "62"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "63"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "64"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "65"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "66"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "67"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "68"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "69"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "70"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "71"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "72"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "73"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "74"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "75"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "76"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "77"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "78"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "79"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "80"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "81"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "82"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "83"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "84"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "85"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "86"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "87"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "88"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "89"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "90"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "91"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "92"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "93"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "94"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "95"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "96"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "97"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "98"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "99"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "100"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "101"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "102"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "103"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "104"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "105"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "106"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "107"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "108"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "109"}
+    |--- bracketed_name. Attributes: {rule => "1", uid => "110"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "111"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "112"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "113"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "114"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "115"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "116"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "117"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "118"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "119"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "120"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "121"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "122"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "123"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "124"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "125"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "126"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "127"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "128"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "129"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "130"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.cooked.tree.new 
new/Tree-DAG_Node-1.35/share/metag.cooked.tree.new
--- old/Tree-DAG_Node-1.33/share/metag.cooked.tree.new  1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.35/share/metag.cooked.tree.new  2025-04-25 
07:57:57.000000000 +0200
@@ -0,0 +1,130 @@
+Cooked tree. Attributes: {rule => "", uid => "1"}
+    |--- statements. Attributes: {rule => "1", uid => "2"}
+    |--- default_rule. Attributes: {rule => "1", uid => "3"}
+    |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"}
+    |--- start_rule. Attributes: {rule => "1", uid => "5"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "6"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "7"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "8"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "9"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "10"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "11"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "12"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "13"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "14"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "15"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "16"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "17"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "18"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "19"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "20"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "21"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "22"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "23"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "24"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "25"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "26"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "27"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "28"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "29"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "30"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "31"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "32"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "33"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "34"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "35"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "36"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "37"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "38"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "39"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "40"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "41"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "42"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "43"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "44"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "45"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "46"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "47"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "48"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "49"}
+    |--- lhs. Attributes: {rule => "1", uid => "50"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "51"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "52"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "53"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "54"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "55"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "56"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "57"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "58"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "59"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "60"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "61"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "62"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "63"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "64"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "65"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "66"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "67"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "68"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "69"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "70"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "71"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "72"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "73"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "74"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "75"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "76"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "77"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "78"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "79"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "80"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "81"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "82"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "83"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "84"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "85"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "86"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "87"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "88"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "89"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "90"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "91"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "92"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "93"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "94"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "95"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "96"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "97"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "98"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "99"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "100"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "101"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "102"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "103"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "104"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "105"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "106"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "107"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "108"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "109"}
+    |--- bracketed_name. Attributes: {rule => "1", uid => "110"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "111"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "112"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "113"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "114"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "115"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "116"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "117"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "118"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "119"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "120"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "121"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "122"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "123"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "124"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "125"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "126"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "127"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "128"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "129"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "130"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/metag.cooked.tree.txt 
new/Tree-DAG_Node-1.35/t/metag.cooked.tree.txt
--- old/Tree-DAG_Node-1.33/t/metag.cooked.tree.txt      1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.35/t/metag.cooked.tree.txt      2025-04-25 
08:18:51.000000000 +0200
@@ -0,0 +1,130 @@
+Cooked tree. Attributes: {rule => "", uid => "1"}
+    |--- statements. Attributes: {rule => "1", uid => "2"}
+    |--- default_rule. Attributes: {rule => "1", uid => "3"}
+    |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"}
+    |--- start_rule. Attributes: {rule => "1", uid => "5"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "6"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "7"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "8"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "9"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "10"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "11"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "12"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "13"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "14"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "15"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "16"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "17"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "18"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "19"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "20"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "21"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "22"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "23"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "24"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "25"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "26"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "27"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "28"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "29"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "30"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "31"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "32"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "33"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "34"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "35"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "36"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "37"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "38"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "39"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "40"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "41"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "42"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "43"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "44"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "45"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "46"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "47"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "48"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "49"}
+    |--- lhs. Attributes: {rule => "1", uid => "50"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "51"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "52"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "53"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "54"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "55"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "56"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "57"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "58"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "59"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "60"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "61"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "62"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "63"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "64"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "65"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "66"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "67"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "68"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "69"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "70"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "71"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "72"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "73"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "74"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "75"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "76"}
+    |--- discard_rule. Attributes: {rule => "1", uid => "77"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "78"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "79"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "80"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "81"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "82"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "83"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "84"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "85"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "86"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "87"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "88"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "89"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "90"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "91"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "92"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "93"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "94"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "95"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "96"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "97"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "98"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "99"}
+    |--- separator_specification. Attributes: {rule => "1", uid => "100"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "101"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "102"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "103"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "104"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "105"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "106"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "107"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "108"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "109"}
+    |--- bracketed_name. Attributes: {rule => "1", uid => "110"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "111"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "112"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "113"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "114"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "115"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "116"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "117"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "118"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "119"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "120"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "121"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "122"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "123"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "124"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "125"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "126"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "127"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "128"}
+    |--- priority_rule. Attributes: {rule => "1", uid => "129"}
+    |--- quantified_rule. Attributes: {rule => "1", uid => "130"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/read.tree.t 
new/Tree-DAG_Node-1.35/t/read.tree.t
--- old/Tree-DAG_Node-1.33/t/read.tree.t        2025-03-30 01:58:57.000000000 
+0100
+++ new/Tree-DAG_Node-1.35/t/read.tree.t        2025-04-26 09:47:02.000000000 
+0200
@@ -5,7 +5,7 @@
 use File::Spec;
 use File::Temp;
 
-use File::Slurper 'read_text';
+use File::Slurper 'read_lines';
 
 use Test::More;
 
@@ -20,7 +20,7 @@
        my($temp_dir)        = File::Temp -> newdir('temp.XXXX', CLEANUP => 1, 
EXLOCK => 0, TMPDIR => 1);
        my($temp_dir_name)   = $temp_dir -> dirname;
        my($test_file_name)  = File::Spec -> catfile($temp_dir_name, 
"$file_name.txt");
-       my($input_file_name) = File::Spec -> catfile('t', 
"tree.$file_name.attributes.txt");
+       my($input_file_name) = File::Spec -> catfile('t', "$file_name.txt");
        my($root)            = $node -> read_tree($input_file_name);
        my($no_attr)         = $file_name =~ /without/ ? 1 : 0;
 
@@ -28,7 +28,12 @@
        print $fh "$_\n" for @{$root -> tree2string({no_attributes => 
$no_attr})};
        close $fh;
 
-       is(read_text($input_file_name), read_text($test_file_name), 
"\u$file_name attributes: Output tree matches shipped tree");
+       # Ensure inter-OS compatability.
+
+       my(@expected)   = map{s/\r$//g; $_} read_lines($input_file_name);
+       my(@got)                = map{s/\r$//g; $_} read_lines($test_file_name);
+
+       is(join('', @expected), join('', @got), "\u$file_name attributes: 
Output tree matches shipped tree");
 
 } # End of process.
 
@@ -40,9 +45,15 @@
 
 isa_ok($node, 'Tree::DAG_Node', 'new() returned correct object type');
 
-for (qw/utf8/)# with without/)
+my($sample_file_name);
+
+for (qw/utf8 with without/)
 {
-       process($node, $_);
+       $sample_file_name = "tree.$_.attributes";
+
+       process($node, $sample_file_name);
 }
 
+process($node, 'metag.cooked.tree');
+
 done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/tree.with.attributes.txt 
new/Tree-DAG_Node-1.35/t/tree.with.attributes.txt
--- old/Tree-DAG_Node-1.33/t/tree.with.attributes.txt   2021-08-16 
08:44:31.000000000 +0200
+++ new/Tree-DAG_Node-1.35/t/tree.with.attributes.txt   2025-04-25 
08:05:11.000000000 +0200
@@ -1,134 +1,134 @@
 statements. Attributes: {}
-   |--- :default. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":default"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- [values]. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "[values]"}
-   |--- :start. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":start"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- graph_grammar. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_grammar"}
-   |--- graph_grammar. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph_grammar"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
-   |   |--- action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- graph. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph"}
-   |--- graph_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_definition"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- node_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_definition"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- edge_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_definition"}
-   |--- node_definition. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_definition"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
-   |   |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
-   |--- node_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_statement"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
-   |   |--- attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
-   |   |--- (','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "(',')"}
-   |   |--- node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
-   |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
-   |   |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
-   |   |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
-   |   |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
-   |--- start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- '['. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'['"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
-   |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- ']'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "']'"}
-   |--- edge_definition. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_definition"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
-   |   |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
-   |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_statement"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
-   |   |--- attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
-   |   |--- (','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "(',')"}
-   |   |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
-   |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
-   |   |--- |. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
-   |   |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
-   |   |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
-   |   |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
-   |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "directed_edge"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- '->'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'->'"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
-   |   |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
-   |   |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
-   |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "undirected_edge"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- '--'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'--'"}
-   |--- attribute_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "attribute_definition"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- attribute_statement. Attributes: {bracketed_name => "0", 
quantifier => "*", real_name => "attribute_statement"}
-   |--- attribute_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "attribute_statement"}
-   |   |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
-   |   |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
-   |   |--- end_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "end_attributes"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
-   |   |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
-   |   |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
-   |--- start_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_attributes"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- '{'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'{'"}
-   |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- end_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "end_attributes"}
-   |--- end_attributes. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_attributes"}
-   |   |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-   |   |--- '}'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'}'"}
-   |--- :discard. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":discard"}
-   |   |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
-   |   |--- whitespace. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "whitespace"}
-   |--- whitespace. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "whitespace"}
-       |--- ~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
-       |--- [\s]. Attributes: {bracketed_name => "0", quantifier => "+", 
real_name => "[\s]"}
+    |--- :default. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":default"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- [values]. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "[values]"}
+    |--- :start. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":start"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- graph_grammar. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_grammar"}
+    |--- graph_grammar. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph_grammar"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
+    |    |--- action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- graph. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph"}
+    |--- graph_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_definition"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- node_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "node_definition"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- edge_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "edge_definition"}
+    |--- node_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_definition"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- node_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "node_statement"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- node_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "node_statement"}
+    |    |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
+    |--- node_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_statement"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+    |    |--- attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- node_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "node_statement"}
+    |    |--- (','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |    |--- node_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "node_statement"}
+    |--- node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- start_node. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_node"}
+    |    |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- start_node. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_node"}
+    |    |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+    |    |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- start_node. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_node"}
+    |--- start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- '['. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+    |--- end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- ']'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- edge_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_definition"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- edge_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "edge_statement"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- edge_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "edge_statement"}
+    |    |--- graph_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "graph_definition"}
+    |--- edge_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_statement"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+    |    |--- attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- edge_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "edge_statement"}
+    |    |--- (','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |    |--- edge_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "edge_statement"}
+    |--- edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+    |    |--- |. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "|"}
+    |    |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "undirected_edge"}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+    |    |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+    |    |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+    |--- directed_edge. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "directed_edge"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- '->'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "undirected_edge"}
+    |    |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+    |    |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "undirected_edge"}
+    |--- undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- '--'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- attribute_definition. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "attribute_definition"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- attribute_statement. Attributes: {bracketed_name => "0", 
quantifier => "*", real_name => "attribute_statement"}
+    |--- attribute_statement. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "attribute_statement"}
+    |    |--- ::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+    |    |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
+    |    |--- end_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "end_attributes"}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
+    |    |--- pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+    |    |--- event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- start_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "start_attributes"}
+    |--- start_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_attributes"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- '{'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- :lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- end_attributes. Attributes: {bracketed_name => "0", quantifier 
=> "", real_name => "end_attributes"}
+    |--- end_attributes. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_attributes"}
+    |    |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+    |    |--- '}'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ""}
+    |--- :discard. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":discard"}
+    |    |--- =>. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "=>"}
+    |    |--- whitespace. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "whitespace"}
+    |--- whitespace. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "whitespace"}
+         |--- ~. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "~"}
+         |--- [\s]. Attributes: {bracketed_name => "0", quantifier => "+", 
real_name => "[\s]"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/tree.without.attributes.txt 
new/Tree-DAG_Node-1.35/t/tree.without.attributes.txt
--- old/Tree-DAG_Node-1.33/t/tree.without.attributes.txt        2021-08-16 
08:44:31.000000000 +0200
+++ new/Tree-DAG_Node-1.35/t/tree.without.attributes.txt        2025-04-25 
08:06:22.000000000 +0200
@@ -1,134 +1,134 @@
-statements
-    |--- :default
-    |    |--- ::=
-    |    |--- action
-    |    |--- =>
-    |    |--- [values]
-    |--- :start
-    |    |--- ::=
-    |    |--- graph_grammar
-    |--- graph_grammar
-    |    |--- ::=
-    |    |--- graph_definition
-    |    |--- action
-    |    |--- =>
-    |    |--- graph
-    |--- graph_definition
-    |    |--- ::=
-    |    |--- node_definition
-    |    |--- |
-    |    |--- edge_definition
-    |--- node_definition
-    |    |--- ::=
-    |    |--- node_statement
-    |    |--- |
-    |    |--- node_statement
-    |    |--- graph_definition
-    |--- node_statement
-    |    |--- ::=
-    |    |--- node_name
-    |    |--- |
-    |    |--- node_name
-    |    |--- attribute_definition
-    |    |--- |
-    |    |--- node_statement
-    |    |--- (',')
-    |    |--- node_statement
-    |--- node_name
-    |    |--- ::=
-    |    |--- start_node
-    |    |--- end_node
-    |--- :lexeme
-    |    |--- ~
-    |    |--- start_node
-    |    |--- pause
-    |    |--- =>
-    |    |--- before
-    |    |--- event
-    |    |--- =>
-    |    |--- start_node
-    |--- start_node
-    |    |--- ~
-    |    |--- '['
-    |--- :lexeme
-    |    |--- ~
-    |    |--- end_node
-    |--- end_node
-    |    |--- ~
-    |    |--- ']'
-    |--- edge_definition
-    |    |--- ::=
-    |    |--- edge_statement
-    |    |--- |
-    |    |--- edge_statement
-    |    |--- graph_definition
-    |--- edge_statement
-    |    |--- ::=
-    |    |--- edge_name
-    |    |--- |
-    |    |--- edge_name
-    |    |--- attribute_definition
-    |    |--- |
-    |    |--- edge_statement
-    |    |--- (',')
-    |    |--- edge_statement
-    |--- edge_name
-    |    |--- ::=
-    |    |--- directed_edge
-    |    |--- |
-    |    |--- undirected_edge
-    |--- :lexeme
-    |    |--- ~
-    |    |--- directed_edge
-    |    |--- pause
-    |    |--- =>
-    |    |--- before
-    |    |--- event
-    |    |--- =>
-    |    |--- directed_edge
-    |--- directed_edge
-    |    |--- ~
-    |    |--- '->'
-    |--- :lexeme
-    |    |--- ~
-    |    |--- undirected_edge
-    |    |--- pause
-    |    |--- =>
-    |    |--- before
-    |    |--- event
-    |    |--- =>
-    |    |--- undirected_edge
-    |--- undirected_edge
-    |    |--- ~
-    |    |--- '--'
-    |--- attribute_definition
-    |    |--- ::=
-    |    |--- attribute_statement
-    |--- attribute_statement
-    |    |--- ::=
-    |    |--- start_attributes
-    |    |--- end_attributes
-    |--- :lexeme
-    |    |--- ~
-    |    |--- start_attributes
-    |    |--- pause
-    |    |--- =>
-    |    |--- before
-    |    |--- event
-    |    |--- =>
-    |    |--- start_attributes
-    |--- start_attributes
-    |    |--- ~
-    |    |--- '{'
-    |--- :lexeme
-    |    |--- ~
-    |    |--- end_attributes
-    |--- end_attributes
-    |    |--- ~
-    |    |--- '}'
-    |--- :discard
-    |    |--- =>
-    |    |--- whitespace
-    |--- whitespace
-         |--- ~
-         |--- [\s]
+statements. Attributes: {}
+    |--- :default. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- action. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- [values]. Attributes: {}
+    |--- :start. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- graph_grammar. Attributes: {}
+    |--- graph_grammar. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- graph_definition. Attributes: {}
+    |    |--- action. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- graph. Attributes: {}
+    |--- graph_definition. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- node_definition. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- edge_definition. Attributes: {}
+    |--- node_definition. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- node_statement. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- node_statement. Attributes: {}
+    |    |--- graph_definition. Attributes: {}
+    |--- node_statement. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- node_name. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- node_name. Attributes: {}
+    |    |--- attribute_definition. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- node_statement. Attributes: {}
+    |    |--- (','). Attributes: {}
+    |    |--- node_statement. Attributes: {}
+    |--- node_name. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- start_node. Attributes: {}
+    |    |--- end_node. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- start_node. Attributes: {}
+    |    |--- pause. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- before. Attributes: {}
+    |    |--- event. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- start_node. Attributes: {}
+    |--- start_node. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- '['. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- end_node. Attributes: {}
+    |--- end_node. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- ']'. Attributes: {}
+    |--- edge_definition. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- edge_statement. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- edge_statement. Attributes: {}
+    |    |--- graph_definition. Attributes: {}
+    |--- edge_statement. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- edge_name. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- edge_name. Attributes: {}
+    |    |--- attribute_definition. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- edge_statement. Attributes: {}
+    |    |--- (','). Attributes: {}
+    |    |--- edge_statement. Attributes: {}
+    |--- edge_name. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- directed_edge. Attributes: {}
+    |    |--- |. Attributes: {}
+    |    |--- undirected_edge. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- directed_edge. Attributes: {}
+    |    |--- pause. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- before. Attributes: {}
+    |    |--- event. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- directed_edge. Attributes: {}
+    |--- directed_edge. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- '->'. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- undirected_edge. Attributes: {}
+    |    |--- pause. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- before. Attributes: {}
+    |    |--- event. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- undirected_edge. Attributes: {}
+    |--- undirected_edge. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- '--'. Attributes: {}
+    |--- attribute_definition. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- attribute_statement. Attributes: {}
+    |--- attribute_statement. Attributes: {}
+    |    |--- ::=. Attributes: {}
+    |    |--- start_attributes. Attributes: {}
+    |    |--- end_attributes. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- start_attributes. Attributes: {}
+    |    |--- pause. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- before. Attributes: {}
+    |    |--- event. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- start_attributes. Attributes: {}
+    |--- start_attributes. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- '{'. Attributes: {}
+    |--- :lexeme. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- end_attributes. Attributes: {}
+    |--- end_attributes. Attributes: {}
+    |    |--- ~. Attributes: {}
+    |    |--- '}'. Attributes: {}
+    |--- :discard. Attributes: {}
+    |    |--- =>. Attributes: {}
+    |    |--- whitespace. Attributes: {}
+    |--- whitespace. Attributes: {}
+         |--- ~. Attributes: {}
+         |--- [\s]. Attributes: {}

Reply via email to