The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w

use strict;
require 5.005;
#BEGIN {  unshift @INC, "../lib"; }

use Parse::LexEvent;
print STDERR "Version $Parse::LexEvent::VERSION\n";

my @tokens = (
	      new Parse::Token::Simple(Name => 'ccomment', 
				       Handler => 'comment',
				       Regex => '//.*\n',
				      ),
	      new Parse::Token::Delimited(Name => 'comment',
					  Start => '/[*]', 
					  End => '[*]/'
					 ),
	      new Parse::Token::Quoted(Name => 'squotes', 
				       Handler => 'string',
				       Quote => qq!\'!, 
				      ),
	      new Parse::Token::Quoted(Name => 'dquotes', 
				       Handler => 'string',
				       Escape => '\\',
				       Quote => qq!\"!,	
				      ),
	      new Parse::Token::Simple(Name => 'remainder', 
				       Regex => '[^/\'\"]+', 
				       ReadMore => 1)
	    );

sub string {
  print $_[0]->name, ": $_[1]\n";
}
sub comment {
  print $_[0]->name, ": $_[1]\n";
}
sub remainder {
  print $_[0]->name, ": $_[1]\n";
}
#select STDERR;
my $lexer = Parse::LexEvent->new(@tokens);
$lexer->from(\*DATA);
$lexer->parse();

__END__
/*
  A C comment 
*/
// A C++ comment
var d = "string in \"double\" quotes";
var s = 'string in ''single'' quotes';
var x = 1;
var y = 2;