DESCRIPTION

    ESLIF is derived from perl's Marpa::R2, and has its own BNF, documented
    in MarpaX::ESLIF::BNF.

    The main features of this BNF are:

    Sub-grammars

      The number of sub grammars is unlimited.

    Regular expressions

      Native support of regular expression using the PCRE2
      <http://www.pcre.org/> library (i.e. this is <not> exactly perl
      regexps, although very closed).

    Streaming

      Native support of streaming input.

    Beginners might want to look at MarpaX::ESLIF::Introduction.

SYNOPSIS

      use MarpaX::ESLIF;
    
      my $eslif = MarpaX::ESLIF->new();
      printf "ESLIF library version: %s\n", $eslif->version;

    With a logger, using Log::Any::Adapter::Stderr as an example:

      use MarpaX::ESLIF;
      use Log::Any qw/$log/;
      use Log::Any::Adapter ('Stderr', log_level => 'trace' );
    
      my $eslif = MarpaX::ESLIF->new($log);
      printf "ESLIF library version: %s\n", $eslif->version;

    This class and its derivatives are thread-safe. Although there can be
    many ESLIF instances, in practice a single instance is enough, unless
    you want different logging interfaces. This is why the new method is
    implemented as a multiton. Once a MarpaX::ESLIF instance is created,
    the user should create a MarpaX::ESLIF::Grammar instance to have a
    working grammar.

METHODS

 MarpaX::ESLIF->new($loggerInterface)

      my $loggerInterface = My::Logger::Interface->new();
      my $eslif = MarpaX::ESLIF->new();

    Returns an instance of MarpaX::ESLIF, noted $eslif below.

    $loggerInterface is an optional parameter that, when its exists, must
    be an object instance that can do the methods documented in
    MarpaX::ESLIF::Logger::Interface, or undef.

    An example of logging implementation can be a Log::Any adapter.

 MarpaX::ESLIF->getInstance($loggerInterface)

    Alias to new.

 $eslif->version()

      printf "ESLIF library version: %s\n", $eslif->version;

    Returns a string containing the current underlying ESLIF library
    version.

NOTES

    The perl interface is an all-in-one version of marpaESLIF
    <https://github.com/jddurand/c-marpaESLIF> library, which means that
    character conversion is using iconv (or iconv-like on Windows) instead
    of ICU, even if the later is available on your system.

 BOOLEAN TYPE

    ESLIF has a boolean type, perl has not. In order to not reinvent the
    wheel, the widely JSON's Perl's boolean utilities via JSON::MaybeXS
    wrapper are used, i.e.:

    true

      A true value. You may localize $MarpaX::ESLIF::true before using
      ESLIF to change it.

      Defaults to JSON::MaybeXS::true().

    false

      A false value. You may localize $MarpaX::ESLIF::false before using
      ESLIF to change it.

      Defaults to JSON::MaybeXS::false().

    is_bool($value)

      Returns a true value if $value is a boolean. You may localize
      MarpaX::ESLIF::is_bool() function before using ESLIF to change it.
      ESLIF always requires at least that $value is an object, object
      nature then defaults to JSON::MaybeXS::is_bool($value)

 INTEGER TYPE

    ESLIF consider scalars that have only the internal IV flag.

 FLOAT TYPE

    ESLIF consider scalars that have only the internal NV flag.

 STRING TYPE

    ESLIF consider scalars that have only the internal PV flag.

SEE ALSO

    MarpaX::ESLIF::Introduction, PCRE2 <http://www.pcre.org/>,
    MarpaX::ESLIF::BNF, MarpaX::ESLIF::Logger::Interface,
    MarpaX::ESLIF::Grammar, MarpaX::ESLIF::Recognizer, Types::Standard,
    JSON::MaybeXS.

