#20260730183500000000
grammar CommaDelimitedQuads {
token TOP { [<delimited-quad> \v*]* }
token delimited-quad { <first=.a-stamp> ',' <second=.not-a-comma> ',' <third=.not-a-comma> ',' <fourth=.the-rest> }
token a-stamp { (\d ** 20) ('_' (\d ** 20))? }
token not-a-comma { <-[,]>+ }
token the-rest { <-[\v]>+ }
}
sub EquivalenceRelation(**@quad) {
my %match-count;
my $sets = 1;
@quad.map({ %match-count{$_} //= $sets++; %match-count{$_} }).join
}
my %a-pattern-handler =
'1111' => -> $/ { say 'FOUND {1, 2, 3, 4} SYNTACTIC DEFINITION' },
'1112' => -> $/ { say 'FOUND {1, 2, 3} {4} SIGNATURE' },
'1121' => -> $/ { say 'FOUND {1, 2, 4} {3} SUBSET / TABLE' },
'1122' => -> $/ { say 'FOUND {1, 2} {3, 4} SUPERSET / SCHEMA' },
'1211' => -> $/ { say 'FOUND {1, 3, 4} {2} FAILURE' },
'1212' => -> $/ { say 'FOUND {1, 3} {2, 4} SUCCESS' },
'1221' => -> $/ { say 'FOUND {1, 4} {2, 3} OPT-IN / FOLLOW' },
'1222' => -> $/ { say 'FOUND {1} {2, 3, 4} OPT-OUT / UNFOLLOW' },
'1123' => -> $/ { say 'FOUND {1, 2} {3} {4} INDEX / COLUMN' },
'1213' => -> $/ { say 'FOUND {1, 3} {2} {4} ALIAS' },
'1223' => -> $/ { say 'FOUND {1} {2, 3} {4} HANDLE' },
'1231' => -> $/ { say 'FOUND {1, 4} {2} {3} KNOWN UNKNOWN' },
'1232' => -> $/ { say 'FOUND {1} {2, 4} {3} REVEALED' },
'1233' => -> $/ { say 'FOUND {1} {2} {3, 4} CONCEALED' },
'1234' => -> $/ { say 'FOUND {1} {2} {3} {4} ASSERTION' },
;
class CommaDelimitedQuadsActions {
method delimited-quad ($/) {
my $stamp = ~$<first>.subst: /('_' (\d ** 20))/, '';
my $a-pattern = EquivalenceRelation($stamp, ~$<second>, ~$<third>, ~$<fourth>);
(%a-pattern-handler{$a-pattern} // -> $/ { warn "???: $a-pattern" })($/);
}
}
my $actions = CommaDelimitedQuadsActions;
CommaDelimitedQuads.parse(q:to/EOI/, :$actions);
20260730183500000000,20260730183500000000,20260730183500000000,20260730183500000000
20260730183500000001,20260730183500000001,20260730183500000001,20260730183500000000
20260730183500000002,20260730183500000002,20260730183500000001,20260730183500000002
20260730183500000003,20260730183500000003,20260730183500000002,20260730183500000002
20260730183500000004,20260730183500000005,20260730183500000004,20260730183500000004
20260730183500000006,20260730183500000005,20260730183500000006,20260730183500000005
20260730183500000007,20260730183500000003,20260730183500000003,20260730183500000007
20260730183500000008,20260730183500000003,20260730183500000003,20260730183500000003
20260730183500000009,20260730183500000009,20260730183500000002,20260730183500000003
20260730183500000010,20260730183500000001,20260730183500000010,19831104012345678910
20260730183500000011,20260730183500000006,20260730183500000006,<3
20260730183500000012,20260730183500000002,20260730183500000009,20260730183500000012
20260730183500000013,20260730183500000002,20260730183500000009,20260730183500000002
20260730183500000014,20260730183500000002,20260730183500000009,20260730183500000009
20260730183500000015,20260730183500000002,20260730183500000009,20260730183500000006
EOI