—package
Language::Expr::Compiler::Base;
BEGIN {
$Language::Expr::Compiler::Base::VERSION
=
'0.08'
;
}
# ABSTRACT: Base class for Expr compilers
use
5.010;
use
Any::Moose;
# [[type, uuid, data], ...]
has
markers
=> (
is
=>
'rw'
,
default
=>
sub
{ [] });
has
func_mapping
=> (
is
=>
'rw'
,
default
=>
sub
{ {} });
sub
new_marker {
my
(
$self
,
$type
,
$data
) =
@_
;
my
$uuid
= UUID::Tiny::create_uuid_as_string(UUID_V4);
#my $uuid = int(9000*rand()+1000);
#print "DEBUG: Creating new marker: type=$type, uuid=$uuid, data=", ($data // "undef"), "\n\n";
push
@{
$self
->markers }, [
$type
,
$uuid
,
$data
];
$uuid
;
}
sub
marker_ids {
my
(
$self
) =
@_
;
map
{
$_
->[1]} @{
$self
->markers };
}
sub
marker_ids_re {
my
(
$self
) =
@_
;
my
$re
=
"(?:"
.
join
(
"|"
,
map
{
$_
->[1]} @{
$self
->markers }) .
")"
;
qr/$re/
;
}
__PACKAGE__->meta->make_immutable;
no
Any::Moose;
1;
__END__
=pod
=head1 NAME
Language::Expr::Compiler::Base - Base class for Expr compilers
=head1 VERSION
version 0.08
=head1 ATTRIBUTES
=head2 markers => ARRAYREF
Used to mark compile output string with various unique strings, and
later on revisit these markers and substitute for other, final
values. This technique is kind of a hack, used for subexpression,
inserting PHP use() statement (because they must be processed outward
to inward), etc.
=head2 func_mapping => HASHREF
Map Expr function to target language's function/method/property.
=head1 METHODS
=head2 new_marker(TYPE[, DATA]) => UUID
Create a new marker. Return a unique ID to be placed in compiled
output.
=head2 marker_ids() => ARRAY
Return an array of all marker IDs.
=head2 marker_ids_re() => STRING
Return a regex that matches marker IDs.
=head1 AUTHOR
Steven Haryanto <stevenharyanto@gmail.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Steven Haryanto.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut