NAME
MarpaX::ESLIF::Symbol - MarpaX::ESLIF's symbol
VERSION
version 6.0.12
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');
my $metaSymbol = MarpaX::ESLIF::Symbol->new($eslif, type => 'meta',
grammar => MarpaX::ESLIF::Grammar->new(
$eslif,
"<something> ::= <SOMETHING>\n<SOMETHING> ~ 'that'")
symbol => 'SOMETHING');
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";
}
if (defined(my $match = $metaSymbol->try('something'))) {
print "==> Meta match: $match\n";
}
External symbols can be of type string
, regex
or meta
. 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
A meta symbol must be a lexeme in the given external grammar.
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", "regex" or "meta". Required.
pattern
-
Value is the pattern content. Required for "string" and "regex" types.
encoding
-
Value is the pattern encoding. Optional for "string" and "regex" types.
modifiers
-
Value is a string containing modifiers. Optional for "string" and "regex" types.
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
andc
modifiers.
grammar
-
Value is an external grammar. Required for "meta" type.
symbol
-
Value is a lexeme in the external grammar. Required for "meta" type.
$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.
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 208:
'=item' outside of any '=over'
- Around line 216:
You forgot a '=back' before '=head2'