our
$VERSION
= 0.004_000;
our
hashref
$properties
= {};
sub
length
{
{
my
integer::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
integer
$length
= 0;
if
(
exists
$self
->{children}->[0] ) {
$length
++;
}
else
{
return
$length
;
}
my
object
$list_elements_star
=
$self
->{children}->[1];
foreach
my
object
$list_element
( @{
$list_elements_star
->{children} } ) {
if
(
ref
$list_element
ne
'TERMINAL'
) {
$length
++;
}
}
return
$length
;
}
sub
ast_to_rperl__generate {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$rperl_source_group
= {
PMC
=>
q{}
};
if
( (
ref
$self
) ne
'ListElements_211'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
. (
ref
$self
) .
' found where ListElements_211 expected, dying'
)
.
"\n"
;
}
my
object
$list_element0
=
$self
->{children}->[0];
my
object
$list_elements_star
=
$self
->{children}->[1];
my
string_hashref
$rperl_source_subgroup
=
$list_element0
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
foreach
my
object
$list_element
( @{
$list_elements_star
->{children} } ) {
if
(
ref
$list_element
eq
'TERMINAL'
) {
if
(
$list_element
->{attr} ne
q{,}
) {
die
RPerl::Parser::rperl_rule__replace(
q{ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '}
.
$list_element
->{attr}
.
q{' found where OP21_LIST_COMMA ',' expected, dying}
)
.
"\n"
;
}
$rperl_source_group
->{PMC} .=
$list_element
->{attr} .
q{ }
;
}
else
{
my
string_hashref
$rperl_source_subgroup
=
$list_element
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
}
}
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::DS::A::LEs __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
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{}
};
if
( (
ref
$self
) ne
'ListElements_211'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
. (
ref
$self
) .
' found where ListElements_211 expected, dying'
)
.
"\n"
;
}
if
( (
exists
$modes
->{_inside_list_elements} ) and (
defined
$modes
->{_inside_list_elements} ) ) {
if
( ( not
exists
$modes
->{_inside_list_elements_saved} ) or ( not
defined
$modes
->{_inside_list_elements_saved} ) ) {
$modes
->{_inside_list_elements_saved} = [];
}
push
@{
$modes
->{_inside_list_elements_saved} },
$modes
->{_inside_list_elements};
}
$modes
->{_inside_list_elements} = 1;
my
object
$list_element0
=
$self
->{children}->[0];
my
object
$list_elements_star
=
$self
->{children}->[1];
my
string_hashref
$cpp_source_subgroup
=
$list_element0
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
foreach
my
object
$list_element
( @{
$list_elements_star
->{children} } ) {
if
(
ref
$list_element
eq
'TERMINAL'
) {
if
(
$list_element
->{attr} ne
q{,}
) {
die
RPerl::Parser::rperl_rule__replace(
q{ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '}
.
$list_element
->{attr}
.
q{' found where OP21_LIST_COMMA ',' expected, dying}
)
.
"\n"
;
}
if
( (
exists
$modes
->{_inside_print_operator} ) and (
defined
$modes
->{_inside_print_operator} ) and
$modes
->{_inside_print_operator} ) {
$cpp_source_group
->{CPP} .=
' << '
;
}
else
{
$cpp_source_group
->{CPP} .=
$list_element
->{attr} .
q{ }
;
}
}
else
{
my
string_hashref
$cpp_source_subgroup
=
$list_element
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
}
}
delete
$modes
->{_inside_list_elements};
if
( (
exists
$modes
->{_inside_list_elements_saved} )
and (
defined
$modes
->{_inside_list_elements_saved} )
and (
scalar
$modes
->{_inside_list_elements_saved} ) )
{
$modes
->{_inside_list_elements} =
pop
@{
$modes
->{_inside_list_elements_saved} };
if
( not
scalar
$modes
->{_inside_list_elements_saved} ) {
delete
$modes
->{_inside_list_elements_saved}; }
}
return
$cpp_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_CPPTYPES__bson_build {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{}
};
if
( (
ref
$self
) ne
'ListElements_211'
) {
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
. (
ref
$self
) .
' found where ListElements_211 expected, dying'
)
.
"\n"
;
}
if
( (
exists
$modes
->{_inside_list_elements} ) and (
defined
$modes
->{_inside_list_elements} ) ) {
if
( ( not
exists
$modes
->{_inside_list_elements_saved} ) or ( not
defined
$modes
->{_inside_list_elements_saved} ) ) {
$modes
->{_inside_list_elements_saved} = [];
}
push
@{
$modes
->{_inside_list_elements_saved} },
$modes
->{_inside_list_elements};
}
$modes
->{_inside_list_elements} = 1;
my
object
$list_element0
=
$self
->{children}->[0];
my
object
$list_elements_star
=
$self
->{children}->[1];
my
string_hashref
$cpp_source_subgroup
;
if
(
$list_element0
->can(
'ast_to_cpp__generate__CPPOPS_CPPTYPES__bson_build'
)) {
$cpp_source_subgroup
=
$list_element0
->ast_to_cpp__generate__CPPOPS_CPPTYPES__bson_build(
$modes
);
}
else
{
$cpp_source_subgroup
=
$list_element0
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
}
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
foreach
my
object
$list_element
( @{
$list_elements_star
->{children} } ) {
if
(
ref
$list_element
eq
'TERMINAL'
) {
if
(
$list_element
->{attr} ne
q{,}
) {
die
RPerl::Parser::rperl_rule__replace(
q{ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '}
.
$list_element
->{attr}
.
q{' found where OP21_LIST_COMMA ',' expected, dying}
)
.
"\n"
;
}
if
( (
exists
$modes
->{_inside_print_operator} ) and (
defined
$modes
->{_inside_print_operator} ) and
$modes
->{_inside_print_operator} ) {
$cpp_source_group
->{CPP} .=
' << '
;
}
else
{
$cpp_source_group
->{CPP} .=
' << '
;
}
}
else
{
if
(
$list_element
->can(
'ast_to_cpp__generate__CPPOPS_CPPTYPES__bson_build'
)) {
$cpp_source_subgroup
=
$list_element
->ast_to_cpp__generate__CPPOPS_CPPTYPES__bson_build(
$modes
);
}
else
{
$cpp_source_subgroup
=
$list_element
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
}
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
}
}
delete
$modes
->{_inside_list_elements};
if
( (
exists
$modes
->{_inside_list_elements_saved} )
and (
defined
$modes
->{_inside_list_elements_saved} )
and (
scalar
$modes
->{_inside_list_elements_saved} ) )
{
$modes
->{_inside_list_elements} =
pop
@{
$modes
->{_inside_list_elements_saved} };
if
( not
scalar
$modes
->{_inside_list_elements_saved} ) {
delete
$modes
->{_inside_list_elements_saved}; }
}
return
$cpp_source_group
;
}
1;