The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

MarpaX::ESLIF::Grammar::Properties - ESLIF Grammar Properties

VERSION

version 3.0.14

SYNOPSIS

  use MarpaX::ESLIF;

  my $eslif = MarpaX::ESLIF->new();
  my $data = do { local $/; <DATA> };
  my $eslifGrammar = MarpaX::ESLIF::Grammar->new($eslif, $data);
  my $grammarProperties = $eslifGrammar->currentProperties;
  my $grammarPropertiesByLevel = $eslifGrammar->propertiesByLevel(0);

  __DATA__
  #
  # This is an example of a calculator grammar
  #
  :start   ::= Expression
  :default ::=             action        => do_op
                           symbol-action => do_symbol
                           free-action   => do_free     # Supported but useless
  :desc    ::= 'Calculator'
  :discard ::= whitespaces event  => discard_whitespaces$
  :discard ::= comment     event  => discard_comment$

  event ^Number = predicted Number
  event Number$ = completed Number
  Number   ::= NUMBER   action => ::shift

  event Expression$ = completed Expression
  event ^Expression = predicted Expression
  Expression ::=
      Number                                           action => do_int
      | '(' Expression ')'              assoc => group action => ::copy[1]
     ||     Expression '**' Expression  assoc => right
     ||     Expression  '*' Expression
      |     Expression  '/' Expression
     ||     Expression  '+' Expression
      |     Expression  '-' Expression

  whitespaces ::= WHITESPACES
  comment ::= /(?:(?:(?:\/\/)(?:[^\n]*)(?:\n|\z))|(?:(?:\/\*)(?:(?:[^\*]+|\*(?!\/))*)(?:\*\/)))/u

  :lexeme ::= NUMBER pause => before event => ^NUMBER
  :lexeme ::= NUMBER pause => after  event => NUMBER$

  :desc      ~ 'Calculator Tokens'
  NUMBER     ~ /[\d]+/   name => 'NUMBER Lexeme'
  WHITESPACES ~ [\s]+    name => 'WHITESPACES Lexeme'

DESCRIPTION

ESLIF Grammar Properties.

Calls to grammar's currentProperties() or propertiesByLevel() methods outputs an instance of this class.

METHODS

MarpaX::ESLIF::Grammar::Properties->new(%args)

Creation of an ESLIFGrammarProperties instance, noted $self afterwards. %args is a hash that should contain:

level

Grammar level

maxLevel

Maximum grammar level

description

Grammar description

latm

Grammar is in LATM (Longest Accepted Token Mode) ?

defaultSymbolAction

Grammar default symbol action

defaultRuleAction

Grammar default rule action

startId

Start symbol Id

discardId

Discard symbol Id

symbolIds

Symbol Ids (array reference)

ruleIds

Rule Ids (array reference)

$self->getLevel

Returns grammar's level

$self->getMaxLevel

Returns maximum grammar's level

$self->getDescription

Returns grammar's description

$self->isLatm

Returns a boolean that indicates if this grammar is in the LATM (Longest Acceptable Token Mode) or not

$self->getLatm

Alias to isLatm()

$self->getDefaultSymbolAction

Returns grammar's default symbol action, never null

$self->getDefaultRuleAction

Returns grammar's default rule action, can be null

$self->getStartId

Returns grammar's start symbol id, always >= 0

$self->getDiscardId

Returns grammar's discard symbol id, < 0 if none.

$self->getSymbolIds

Returns a reference to a list of symbol identifiers

$self->getRuleIds

Returns a reference to a list of rule identifiers

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.