The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Math::Expression::Evaluator::Lexer - Simple Lexer

SYNOPSIS

use Math::Expression::Evaluator::Lexer qw(lex);
# suppose you want to parse simple math expressions
my @input_tokens = (
    ['Int',             qr/(?:-|\+)?\d+/],
    ['Op',              qr/\+|\*|-|\//],
    ['Brace_Open',      qr/\(/],
    ['Brace_Close',     qr/\)/],
    ['Whitespace',      qr/\s/, sub { return undef; }],
     );
my $text = "-12 * (3+4)";
my $out_tokens = lex($text, \@input_tokens);
for (@$out_tokens){
    my ($name, $text) = @$_;
    print "Found Token $name: $text\n";
}

DESCRIPTION

Math::Expression::Evaluator::Lexer is a simple lexer that breaks up a text into tokens, depending on the input tokens you provide

METHODS

lex

The only exported method is lex, which expects input text as its first argument and a array ref to list of input tokens.

Each input token consists of a token name (which you can choose freely), a regex which matches the desired token, and optionally a reference to a functions that takes the matched token text as its argument. The token text is replaced by the return value of that function. If the function returns undef, that token will not be included in the list of output tokens.

lex() returns an array ref to a list of output tokens, each output token is a reference to a list which contains the token name and the matched text.

COPYRIGHT AND LICENSE

Copyright (C) 2007 by Moritz Lenz, http://moritz.faui2k3.org, moritz@faui2k3.org.

This Program and its Documentation is free software. You may distribute it under the same terms as perl itself.

However all code examples are to be public domain, so you can use it in any way you want to.