NAME
Query::Tags::To::AST - Build AST from Query
DESCRIPTION
The Query::Tags::To::AST package implements a Pegex::Receiver based on Pegex::Tree. It is invoked from the Pegex parser engine to build the syntax tree contained in a Query::Tags object. What follows is a list of all node types which appear in this syntax tree.
Query::Tags::To::AST::Query
This is the root object and represents the entire query. Each assertion in the query is a pair object.
new
my $query = Query::Tags::To::AST::Query->new(@pairs);
Create a new query from a list of assertions.
pairs
my @pairs = $query->pairs;
Return the list of assertions.
test
$query->test($x, \%opts) ? 'PASS' : 'FAIL'
Check if $x
passes all assertions.
Query::Tags::To::AST::Pair
A key-value pair represents the assertion that the key should exist and the values should match.
new
my $pair = Query::Tags::To::AST::Pair->new($key, $value);
Create a new pair object.
key
my $key = $pair->key;
Return the key as a Perl string.
value
my $value = $pair->value;
Return the value (another Query::Tags::To::AST::*
object).
test
$pair->test($x, \%opts) ? 'PASS' : 'FAIL'
Check if $x
matches the pair. This means the following: if $x
is a blessed object and it has a method named $key
, then it is invoked and its return value tested against $value
. Otherwise, if $x
is a hashref, the $key
is looked up and its value is used. Otherwise the test fails.
If $key
is undefined, the default_key
is looked up in the options hashref \%opts
. See "test" in Query::Tags for an explanation of its behavior. If both $key
and default_key
are undefined, the match fails.
If $value
is undef
, then only existence of the method or the hash key is required and its value is ignored. If instead $value
is (not blessed and) equal to the string ?
, then the value behind $key
is checked for truthiness.
Query::Tags::To::AST::String
Represents a string. This object has the stringification and string comparison operators overloaded.
new
my $string = Query::Tags::To::AST::String->new($s);
Create a new string object from a Perl scalar string.
value
my $s = $string->value;
Return the Perl scalar string.
test
$string->test($x) ? 'PASS' : 'FAIL'
Check if $x eq $s
.
Query::Tags::To::AST::Regex
Represents a regex. This object stringifies to the regex pattern.
new
my $regex = Query::Tags::To::AST::Regex->new($re);
Create a new regex object from a Perl regex.
value
my $re = $regex->value;
Return the underlying Perl regex.
test
$regex->test($x) ? 'PASS' : 'FAIL'
Check if $x =~ m/$re/
.
Query::Tags::To::AST::Junction
Represents a junction, a superposition of multiple values which compares to a single value using a given mode.
new
my $j = Query::Tags::To::AST::Junction->new($negate, $type, @values);
Create a new junction of $type
(optionally negated if $negate
is truthy) over the given @values
.
negated
my $negated = $j->negated;
Whether the junction is negated.
type
my $type = $j->type;
Return the junction type as a string &
, |
or !
.
values
my @values = $j->values;
Return the values in the junction (as Query::Tags::To::AST::*
objects).
test
$j->test($x) ? 'PASS' : 'FAIL'
Check if $x
matches the junction. The type &
implements an all junction, |
implements any and !
implements none. These modes govern how the results of testing $x
against the @values
are interpreted. If the junction is negated, then the result will be inverted after it was computed.