NAME
MarpaX::ESLIF::Symbol - MarpaX::ESLIF's symbol
VERSION
version 6.0.21
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
iandcmodifiers.
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'