Still waking up but I think the issue is your pairlist has a semi colon divider but this should be after each pair.
So the trailing semi colon after b is causing it to fail. On Sun, 26 Dec 2021, 06:01 Paul Procacci, <pproca...@gmail.com> wrote: > Hey all, > > Twas the night of Christmas, when all through the house, not a creature > was stirring except Paul w/ his mouse. > > Hope everyone had a Merry Christmas and takes likings to corny opening > statements. ;) > > I was writing a little something tonight using Grammars and ran into > something that I can't seem to wrap my head around. I'm hoping someone > could explain in detail. > > Given the following data: > ---- data ----- > objectKey: > { > a = "bi"; > b = "hi"; > } > ---- end data ----- > > > .... and the following logic partially taken from JSON::Tiny: > > ---- code ---- > grammar myTest { > token TOP { \s* <object> \s* } > rule object { <objectKey> '{' <pairlist> '}' } > # rule object { <objectKey> '{' ~ '}' <pairlist> } > rule objectKey { <cstr> ':' } > rule pairlist { <pair> * % \; } > rule pair { <cstr> '=' <value> } > token cstr { <alpha>+ } > token value { '"' ~ '"' <alpha>* } > } > > class myTestActions { > method TOP($/) { > make $<pairlist>.made.hash.item; > } > > method object($/) { > say 'hello'; > } > > method objectKey($/) { > make $<cstr>.made; > }l > method pairlist($/) { > make $<pair>>>.made.flat; > } > > method pair($/) { > make $<cstr>.made => $<value>.made; > } > > method cstr($/) { make ~$/ } > method value($/) { make ~$/ } > } > ---- code ---- > > > ... it'd be my hopes that this would match. However, It's not matching on > 'object' and I can't seem to figure out why. > > Adding Grammar::Tracer yields the following: > > TOP > | object > | | objectKey > | | | cstr > | | | * MATCH "objectKey" > | | * MATCH "objectKey:\n" > | | pairlist > | | | pair > | | | | cstr > | | | | * MATCH "a" > | | | | value > | | | | * MATCH "\"bi\"" > | | | * MATCH "a = \"bi\"" > | | | pair > | | | | cstr > | | | | * MATCH "b" > | | | | value > | | | | * MATCH "\"hi\"" > | | | * MATCH "b = \"hi\"" > | | | pair > | | | | cstr > | | | | * FAIL > | | | * FAIL > | | * MATCH "a = \"bi\";\n\tb = \"hi\"" > | * FAIL > * FAIL > > What exactly am I doing wrong? Does '{' ~ '}' not work as I expect here? > Appreciate any insight. > > Thanks, > Paul > -- > __________________ > > :(){ :|:& };: >