our
$VERSION
= 0.004_000;
use
constant
NAME
=>
my
string
$TYPED_NAME
=
'exists'
;
use
constant
NAME_CPPOPS_PERLTYPES
=>
my
string
$TYPED_NAME_CPPOPS_PERLTYPES
=
'DUMMY_OP_SCALAR'
;
use
constant
NAME_CPPOPS_CPPTYPES
=>
my
string
$TYPED_NAME_CPPOPS_CPPTYPES
=
'exists'
;
use
constant
ARGUMENTS_MIN
=>
my
integer
$TYPED_ARGUMENTS_MIN
= 1;
use
constant
ARGUMENTS_MAX
=>
my
integer
$TYPED_ARGUMENTS_MAX
= 1;
our
hashref
$properties
= {};
sub
ast_to_rperl__generate {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
object
$operator_named
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$rperl_source_group
= {
PMC
=>
q{}
};
my
string
$operator_named_class
=
ref
$operator_named
;
if
(
$operator_named_class
eq
'Operation_97'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP016, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Named operator '
.
$operator_named
->{children}->[0]
.
' requires exactly one argument, dying'
)
.
"\n"
;
}
elsif
(
$operator_named_class
eq
'Operator_116'
) {
$rperl_source_group
->{PMC} .=
$operator_named
->{children}->[0] .
q{ }
;
my
string_hashref
$rperl_source_subgroup
=
$operator_named
->{children}->[1]->ast_to_rperl__generate(
$modes
,
$self
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
}
elsif
(
$operator_named_class
eq
'Operator_117'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP016, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Named operator '
.
$operator_named
->{children}->[0]
.
' requires exactly one argument, dying'
)
.
"\n"
;
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
. (
$operator_named_class
)
.
' found where Operation_97, Operator_116, or Operator_117 expected, dying'
)
.
"\n"
;
}
return
$rperl_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_PERLTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{// <<< RP::O::E::O::NU::E __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
.
"\n"
};
return
$cpp_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_CPPTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
object
$operator_named
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{}
};
my
string
$operator_named_class
=
ref
$operator_named
;
if
(
$operator_named_class
eq
'Operation_97'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP016, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Named operator '
.
$operator_named
->{children}->[0]
.
' requires exactly one argument, dying'
)
.
"\n"
;
}
elsif
(
$operator_named_class
eq
'Operator_116'
) {
$cpp_source_group
->{CPP} .= NAME_CPPOPS_CPPTYPES() .
q{(}
;
if
((
defined
$operator_named
->{children}->[1]) and
(
exists
$operator_named
->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]) and
(
exists
$operator_named
->{children}->[1]->{children}->[0]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}->[0])
) {
my
object
$variable_symbol_or_self
=
$operator_named
->{children}->[1]->{children}->[0]->{children}->[0];
my
string
$variable_symbol_or_self_class
=
ref
$variable_symbol_or_self
;
if
(
$variable_symbol_or_self_class
eq
'VariableSymbolOrSelf_253'
) {
if
((
exists
$variable_symbol_or_self
->{children}) and
(
defined
$variable_symbol_or_self
->{children}) and
(
defined
$variable_symbol_or_self
->{children}->[0])
) {
my
string
$symbol_or_self
=
$variable_symbol_or_self
->{children}->[0];
substr
$symbol_or_self
, 0, 1,
q{}
;
$cpp_source_group
->{CPP} .=
$symbol_or_self
.
', '
;
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000UG, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Unrecognized grammar rules found where VARIABLE_SYMBOL expected, dying'
) .
"\n"
;
}
}
elsif
(
$variable_symbol_or_self_class
eq
'VariableSymbolOrSelf_254'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000OO, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
.
$variable_symbol_or_self_class
.
' found where VariableSymbolOrSelf_253 expected, can not treat $self object like a hash, dying'
) .
"\n"
;
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
.
$variable_symbol_or_self_class
.
' found where VariableSymbolOrSelf_253 expected, dying'
) .
"\n"
;
}
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000UG, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Unrecognized grammar rules found where Variable_198 expected, dying'
) .
"\n"
;
}
if
(
(
defined
$operator_named
->{children}->[1]) and
(
exists
$operator_named
->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]) and
(
exists
$operator_named
->{children}->[1]->{children}->[0]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}->[1]) and
(
exists
$operator_named
->{children}->[1]->{children}->[0]->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}->[1]->{children}) and
(
defined
$operator_named
->{children}->[1]->{children}->[0]->{children}->[1]->{children}->[0])
) {
my
object
$variable_retrieval
=
$operator_named
->{children}->[1]->{children}->[0]->{children}->[1]->{children}->[0];
my
string
$variable_retrieval_class
=
ref
$variable_retrieval
;
if
(
$variable_retrieval_class
eq
'VariableRetrieval_200'
) {
if
(
(
exists
$variable_retrieval
->{children}) and
(
defined
$variable_retrieval
->{children}) and
(
defined
$variable_retrieval
->{children}->[1]) and
(
exists
$variable_retrieval
->{children}->[1]->{children}) and
(
defined
$variable_retrieval
->{children}->[1]->{children}) and
(
defined
$variable_retrieval
->{children}->[1]->{children}->[0])
) {
my
object
$key
=
$variable_retrieval
->{children}->[1]->{children}->[0];
my
string
$key_class
=
ref
$key
;
if
(
$key_class
eq
'Variable_198'
) {
my
string_hashref
$cpp_source_subgroup
=
$key
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
,
$self
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
.
$key_class
.
' found where Variable_198 expected, dying'
) .
"\n"
;
}
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000UG, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Unrecognized grammar rules found where Variable_198 expected, dying'
) .
"\n"
;
}
}
elsif
(
$variable_retrieval_class
eq
'VariableRetrieval_201'
) {
if
(
(
exists
$variable_retrieval
->{children}) and
(
defined
$variable_retrieval
->{children}) and
(
defined
$variable_retrieval
->{children}->[1])
) {
my
string
$key
=
$variable_retrieval
->{children}->[1];
if
(
$key
eq
q{}
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP860, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Empty string provided as hash key, dying'
) .
"\n"
;
}
$cpp_source_group
->{CPP} .=
q{((const string) "}
.
$key
.
q{")}
;
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000UG, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Unrecognized grammar rules found where Variable_198 expected, dying'
) .
"\n"
;
}
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
.
$variable_retrieval_class
.
' found where VariableRetrieval_200 expected, dying'
) .
"\n"
;
}
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000UG, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Unrecognized grammar rules found where VariableRetrieval_200 and Variable_198 expected, dying'
) .
"\n"
;
}
$cpp_source_group
->{CPP} .=
q{)}
;
}
elsif
(
$operator_named_class
eq
'Operator_117'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP016, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Named operator '
.
$operator_named
->{children}->[0]
.
' requires exactly one argument, dying'
)
.
"\n"
;
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
. (
$operator_named_class
)
.
' found where Operation_97, Operator_116, or Operator_117 expected, dying'
)
.
"\n"
;
}
return
$cpp_source_group
;
}
1;