# [[[ HEADER ]]] package # hide from PAUSE indexing rperloperations; ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names use strict; use warnings; 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 ]]] use RPerl::Operation::Expression::Operator::Bitwise::And; use RPerl::Operation::Expression::Operator::Bitwise::OrXor; use RPerl::Operation::Expression::Operator::Bitwise::Shift; use RPerl::Operation::Expression::Operator::Bitwise::Negation; use RPerl::Operation::Expression::Operator::Close; use RPerl::Operation::Expression::Operator::Compare::EqualNotEqual; use RPerl::Operation::Expression::Operator::Compare::LessThanGreaterThan; use RPerl::Operation::Expression::Operator::List::Range; use RPerl::Operation::Expression::Operator::Logical::And; use RPerl::Operation::Expression::Operator::Logical::Negation; use RPerl::Operation::Expression::Operator::Logical::OrXor; use RPerl::Operation::Expression::Operator::Arithmetic::AddSubtract; use RPerl::Operation::Expression::Operator::IncrementDecrement; use RPerl::Operation::Expression::Operator::Arithmetic::MultiplyDivideModulo; use RPerl::Operation::Expression::Operator::Arithmetic::Negative; use RPerl::Operation::Expression::Operator::Arithmetic::Power; # 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::Operator::Named; use RPerl::Operation::Expression::Operator::Named::AbsoluteValue; use RPerl::Operation::Expression::Operator::Named::Atan2; use RPerl::Operation::Expression::Operator::Named::Chomp; use RPerl::Operation::Expression::Operator::Named::Exp; use RPerl::Operation::Expression::Operator::Named::Keys; use RPerl::Operation::Expression::Operator::Named::Join; use RPerl::Operation::Expression::Operator::Named::Pop; use RPerl::Operation::Expression::Operator::Named::Push; use RPerl::Operation::Expression::Operator::Named::Shift; use RPerl::Operation::Expression::Operator::Named::Sort; use RPerl::Operation::Expression::Operator::Named::Split; use RPerl::Operation::Expression::Operator::Named::Reverse; use RPerl::Operation::Expression::Operator::Named::Unshift; use RPerl::Operation::Expression::Operator::Named::Values; use RPerl::Operation::Expression::Operator::Named::Wait; use RPerl::Operation::Expression::Operator::NamedUnary; use RPerl::Operation::Expression::Operator::NamedUnary::ChangeDirectory; use RPerl::Operation::Expression::Operator::NamedUnary::Cosine; use RPerl::Operation::Expression::Operator::NamedUnary::Defined; use RPerl::Operation::Expression::Operator::NamedUnary::Exists; use RPerl::Operation::Expression::Operator::NamedUnary::FileExists; use RPerl::Operation::Expression::Operator::NamedUnary::FileReadable; use RPerl::Operation::Expression::Operator::NamedUnary::FileRegular; use RPerl::Operation::Expression::Operator::NamedUnary::FileText; use RPerl::Operation::Expression::Operator::NamedUnary::Length; use RPerl::Operation::Expression::Operator::NamedUnary::Log; use RPerl::Operation::Expression::Operator::NamedUnary::Random; use RPerl::Operation::Expression::Operator::NamedUnary::Scalar; use RPerl::Operation::Expression::Operator::NamedUnary::Sine; use RPerl::Operation::Expression::Operator::NamedUnary::SquareRoot; use RPerl::Operation::Expression::Operator::Open; use RPerl::Operation::Expression::Operator::Print; use RPerl::Operation::Expression::Operator::RegularExpression; use RPerl::Operation::Expression::Operator::String::Concatenate; use RPerl::Operation::Expression::Operator::String::Repeat; use RPerl::Operation::Expression::Operator::Ternary; use RPerl::Operation::Expression::ConstantCall; # grammar rule & operation use RPerl::Operation::Expression::SubroutineCall; # grammar rule & operation use RPerl::Operation::Expression::SubroutineCall::MethodCall; # grammar rule & operation use RPerl::Operation::Expression::SubroutineCall::MethodCall::ConstructorCall; # 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 use RPerl::Operation::Statement::OperatorVoid::LoopControl; use RPerl::Operation::Statement::OperatorVoid::Named::Return; use RPerl::Operation::Statement::OperatorVoid::Named::Exit; use RPerl::Operation::Statement::OperatorVoid::Named::Die; use RPerl::Operation::Statement::OperatorVoid::Named::Croak; use RPerl::Operation::Statement::OperatorVoid::Print; 1;