Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

# [[[ HEADER ]]]
package # hide from PAUSE indexing
rperloperations; ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
use strict;
our $VERSION = 0.003_000;
use Carp;
# NEED UPGRADE: make Grammars first-class citizens for full Perl 6 compatibility, we should have it done by Christmas XD
#use parent qw(RPerl::GrammarComponent)
# RPerl system builtin functions, RPerl to C++ name mapping, used in SubroutineCall.pm
our $BUILTINS = {
'blessed' => 'classname',
'class' => 'classname',
'to_string' => 'To_string', # DEV NOTE, CORRELATION #rp028: renamed from Perl to_string() to C++ To_string() to avoid error redefining std::to_string()
# NEED REFACTOR: move SSE builtins to rperlsse.pm, create second $BUILTINS to be used in SubroutineCall.pm?
'sse_number_pair::new_from_singleton_duplicate' => 'sse_number_pair__new_from_singleton_duplicate',
'sse_number_pair::new_from_pair' => 'sse_number_pair__new_from_pair',
'constant_sse_number_pair::new_from_singleton_duplicate' => 'constant_sse_number_pair__new_from_singleton_duplicate',
'constant_sse_number_pair::new_from_pair' => 'constant_sse_number_pair__new_from_pair'
};
# Perl system builtin named operators (AKA named functions);
# the following tokens and their associated rules represent Perl builtin functions which may return-by-value an array or hash data structure,
# instead of an arrayref or hashref as with all user-defined RPerl subroutines and variables
our $BUILTINS_PERL_NAMED = {
#our $POSSIBLE_ARRAY_OR_HASH_RETURN_VALUE = { # alternative naming
# token: OP10_NAMED_UNARY_SCOLON
Operation_97 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operation -> OP10_NAMED_UNARY_SCOLON
OpNamedScolonOrSubExp_258 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExp -> OP10_NAMED_UNARY_SCOLON
OpNamedScolonOrSubExpIn_261 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExpIn -> OP10_NAMED_UNARY_SCOLON
# token: OP10_NAMED_UNARY
Operator_116 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operator -> OP10_NAMED_UNARY SubExpression
Operator_117 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operator -> OP10_NAMED_UNARY
OpStringOrWord_270 => 'RPerl::NonGenerator', # OpStringOrWord -> OP10_NAMED_UNARY
# token: OP01_QW
ListElement_214 => 'RPerl::DataStructure::Array::ListElement', # ListElement -> OP01_QW
# token: OP01_NAMED_SCOLON
Operation_96 => 'RPerl::Operation::Expression::Operator::Named', # Operation -> OP01_NAMED_SCOLON
OpNamedScolonOrSubExp_257 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExp -> OP01_NAMED_SCOLON
OpNamedScolonOrSubExpIn_260 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExpIn -> OP01_NAMED_SCOLON
# token: OP01_NAMED
Operator_100 => 'RPerl::Operation::Expression::Operator::Named', # Operator -> OP01_NAMED SubExpression
Operator_101 => 'RPerl::Operation::Expression::Operator::Named', # Operator -> LPAREN OP01_NAMED ListElement OP21_LIST_COMMA ListElements ')'
OperatorVoid_140 => 'RPerl::Operation::Expression::Operator::Named', # OperatorVoid -> OP01_NAMED ListElement OP21_LIST_COMMA ListElements ';'
};
# [[[ EXPRESSIONS ]]]
# DEV NOTE, CORRELATION #rp020: upon adding new named op file lib/RPerl/Operation/Expression/Operator/Named*/* also add in Named*.pm and rperloperations.*
use RPerl::Operation::Expression::ConstantCall; # grammar rule & operation
use RPerl::Operation::Expression::SubroutineCall; # grammar rule & operation
# [[[ STATEMENTS ]]]
use RPerl::Operation::Statement::Conditional; # grammar rule & operation
use RPerl::Operation::Statement::Loop; # grammar rule & operation
use RPerl::Operation::Statement::Loop::For; # grammar rule & operation
use RPerl::Operation::Statement::Loop::ForEach; # grammar rule & operation
use RPerl::Operation::Statement::Loop::While; # grammar rule & operation
1;