#!/usr/bin/perl -w
use strict;
use Parse::Eyapp::Node;
use Data::Dumper;
use Data::Compare;
my $debugging = 0;
my $handler = sub {
print Dumper($_[0], $_[1]) if $debugging;
Compare($_[0], $_[1])
};
# A tree PROGRAM(FUNCTION) with the attributes set, just after type checking
my $t1 = bless( {
'types' => {
'CHAR' => bless( { 'children' => [] }, 'CHAR' ),
'VOID' => bless( { 'children' => [] }, 'VOID' ),
'INT' => bless( { 'children' => [] }, 'INT' ),
'F(X_0(),INT)' => bless( {
'children' => [
bless( { 'children' => [] }, 'X_0' ),
bless( { 'children' => [] }, 'INT' ) ]
}, 'F' )
},
'symboltable' => { 'f' => { 'type' => 'F(X_0(),INT)', 'line' => 1 } },
'lines' => 2,
'children' => [
bless( {
'symboltable' => {},
'fatherblock' => {},
'children' => [],
'depth' => 1,
'parameters' => [],
'function_name' => [ 'f', 1 ],
'symboltableLabel' => {},
'line' => 1
}, 'FUNCTION' )
],
'depth' => 0,
'line' => 1
}, 'PROGRAM' );
$t1->{'children'}[0]{'fatherblock'} = $t1;
# Tree similar to $t1 but without some attttributes (line, depth, etc.)
my $t2 = bless( {
'types' => {
'CHAR' => bless( { 'children' => [] }, 'CHAR' ),
'VOID' => bless( { 'children' => [] }, 'VOID' ),
'INT' => bless( { 'children' => [] }, 'INT' ),
'F(X_0(),INT)' => bless( {
'children' => [
bless( { 'children' => [] }, 'X_0' ),
bless( { 'children' => [] }, 'INT' ) ]
}, 'F' )
},
'symboltable' => { 'f' => { 'type' => 'F(X_0(),INT)', 'line' => 1 } },
'children' => [
bless( {
'symboltable' => {},
'fatherblock' => {},
'children' => [],
'parameters' => [],
'function_name' => [ 'f', 1 ],
}, 'FUNCTION' )
],
}, 'PROGRAM' );
$t2->{'children'}[0]{'fatherblock'} = $t2;
# Tree similar to $t1 but without some attttributes (line, depth, etc.)
# and without the symboltable attribute
my $t3 = bless( {
'types' => {
'CHAR' => bless( { 'children' => [] }, 'CHAR' ),
'VOID' => bless( { 'children' => [] }, 'VOID' ),
'INT' => bless( { 'children' => [] }, 'INT' ),
'F(X_0(),INT)' => bless( {
'children' => [
bless( { 'children' => [] }, 'X_0' ),
bless( { 'children' => [] }, 'INT' ) ]
}, 'F' )
},
'children' => [
bless( {
'symboltable' => {},
'fatherblock' => {},
'children' => [],
'parameters' => [],
'function_name' => [ 'f', 1 ],
}, 'FUNCTION' )
],
}, 'PROGRAM' );
$t3->{'children'}[0]{'fatherblock'} = $t2;
# Without attributes
if (Parse::Eyapp::Node::equal($t1, $t2)) {
print "\nNot considering attributes: Equal\n";
}
else {
print "\nNot considering attributes: Not Equal\n";
}
# Equality with attributes
if (Parse::Eyapp::Node::equal(
$t1, $t2,
symboltable => $handler,
types => $handler,
)
) {
print "\nConsidering attributes: Equal\n";
}
else {
print "\nConsidering attributes: Not Equal\n";
}
# Equality with attributes
if (Parse::Eyapp::Node::equal(
$t1, $t3,
symboltable => $handler,
types => $handler,
)
) {
print "\nConsidering attributes: Equal\n";
}
else {
print "\nConsidering attributes: Not Equal\n";
}