regexp_grammars_parser.pl 909 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 30 April 2014
  5. # Wesbite: https://github.com/trizen
  6. # Experimental Sidef parser, using Damian Conway's Regexp::Grammars.
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. use Data::Dump qw(pp);
  11. BEGIN {
  12. $SIG{__WARN__} = sub { };
  13. };
  14. use Regexp::Grammars;
  15. local $SIG{__WARN__} = sub { print STDERR @_ };
  16. my $parser = qr{
  17. <[main]>*
  18. <rule: main>
  19. <obj> ((?:\.|\s*)<[method]>)* ;*
  20. <rule: obj>
  21. "([^"\\]+|\\.)*"
  22. | \d+(?:\.\d+)?
  23. | \{ <[main]> \}
  24. <rule: args>
  25. \(<[obj]>(?:,<[obj]>)*\)
  26. <rule: name>
  27. (say|print|sort)
  28. <rule: method>
  29. <name> <args>?
  30. }xms;
  31. my $text = <<'CODE';
  32. "hello".sort("test", "here").print;
  33. {
  34. "sidef" say;
  35. }
  36. CODE
  37. if ($text =~ $parser) {
  38. #print Dumper(\%/);
  39. pp \%/;
  40. }
  41. __END__