Brian Duggan on 11 Apr 2019 06:12:48 -0700


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[Philadelphia-pm] syms in grammars


Hi Folks,

Thanks to those who came yesterday for the clinic :-)

Following up on the conversation from dinner -- here's
an example of using syms to simplify alternation --

Before:
  grammar g {
    rule TOP { 1 <op> 2 }
    token op { <x> | <y> }
    token x { x }
    token y { y | Y }
  }

  class a {
    method op($/) {
      say "op is " ~ ( $<x> // $<y> )  # we want to avoid this
    }
  }

After:
  grammar g {
    rule TOP { 1 <op> 2 }
    proto token op { <...> }
    token op:sym<x> { x }
    token op:sym<y> { y | Y }
  }

  class a {
    method op:sym<x> ($/) { say 'op is x'; }
    method op:sym<y> ($/) { say 'op is y or Y'; }
  }

  my $actions = a.new;
  say g.parse('1 x 2', :$actions);
  say '---';
  say g.parse('1 y 2', :$actions);
  say '---';
  say g.parse('1 Y 2', :$actions);

which produces

  op is x
  「1 x 2」
   op => 「x」
  ---
  op is y or Y
  「1 y 2」
   op => 「y」
  ---
  op is y or Y
  「1 Y 2」
   op => 「Y」
_______________________________________________
Philadelphia-pm mailing list
Philadelphia-pm@pm.org
https://mail.pm.org/mailman/listinfo/philadelphia-pm