NAME

MarpaX::ESLIF::Symbol - MarpaX::ESLIF's symbol

VERSION

version 5.0.5

SYNOPSIS

use MarpaX::ESLIF;

my $eslif = MarpaX::ESLIF->new();

my $stringSymbol = MarpaX::ESLIF::Symbol->new($eslif, type => 'string', pattern => '"String Pattern"');
#
# In ESLIF, a regex is anchored by default
#
my $regexSymbol = MarpaX::ESLIF::Symbol->new($eslif, type => 'regex', pattern => 'Regex.*Pattern', modifiers => 'A');

if (defined(my $match = $stringSymbol->try('String Pattern here'))) {
    print "==> String match: $match\n";
}

if (defined(my $match = $regexSymbol->try('Should match Regex etc Pattern in there'))) {
    print "==> Regex match: $match\n";
}

External symbols can be of type string or regex. They can be used agains a MarpaX::ESLIF::Recognizer or any external input.

A string pattern must follow ESLIF)s BNF, i.e. start and ends with:

' (single quote) character
" (double quote) character
(LEFT DOUBLE QUOTATION MARK) and characters (RIGHT DOUBLE QUOTATION MARK), respectively

DESCRIPTION

MarpaX::ESLIF::Symbol allows to create external symbols on demand

METHODS

MarpaX::ESLIF::Symbol->new($eslif, %options)

Returns a symbol instance, noted $symbol later. %options is a hash that contains:

type

Value must be "string" or "regex". Required.

pattern

Value is the pattern content. Required.

encoding

Value is the pattern encoding. Optional.

modifiers

Value is a string containing modifiers. Optional.

It must follow the specification of the Terminals section of MarpaX::ESLIF::BNF:

----------------------------------------------------------------
Modifiers   Explanation
----------------------------------------------------------------
e           Unset back-references in the pattern will match to empty strings
i           Case-insensitive
j           \u, \U and \x and unset back-references will act as JavaScript standard
m           Multi-line regex
n           Enable Unicode properties and extend meaning of meta-characters
s           A dot meta-character in the pattern matches all characters, including newlines
x           Enable comments. This has some limitation due marpaESLIF semantics
D           A dollar meta-character matches only at the end of the subject string
J           Allow duplicate names for sub-patterns
U           Inverts the "greediness" of the quantifiers
a           Meta-characters will be limited to their ASCII equivalent
u           Forces support of large codepoints
b           Could mean "forced binary" mode
c           Could mean "forced unicode character" mode
A           Remove the systematic anchoring
----------------------------------------------------------------

Note that a string pattern accepts only the i and c modifiers.

$symbol->try($eslif, $scalar)

Try to match the external symbol $symbol on $scalar, that can be anything. Return undef if failure, the matched string if success.

SEE ALSO

MarpaX::ESLIF, MarpaX::ESLIF::Recognizer

AUTHOR

Jean-Damien Durand <jeandamiendurand@free.fr>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Jean-Damien Durand.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.