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'
))) {
"==> String match: $match\n"
;
}
if
(
defined
(
my
$match
=
$regexSymbol
->
try
(
'Should match Regex etc Pattern in there'
))) {
"==> Regex match: $match\n"
;
}
if
(
defined
(
my
$match
=
$metaSymbol
->
try
(
'something'
))) {
"==> 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'