Parent Directory
|
Revision Log
Revision 2645 - (view) (download) (as text)
| 1 : | dpvc | 2616 | ######################################################################### |
| 2 : | # | ||
| 3 : | # Implements equality | ||
| 4 : | # | ||
| 5 : | package Parser::BOP::equality; | ||
| 6 : | use strict; use vars qw(@ISA); | ||
| 7 : | @ISA = qw(Parser::BOP); | ||
| 8 : | |||
| 9 : | # | ||
| 10 : | # Check that the operand types are numbers. | ||
| 11 : | # | ||
| 12 : | sub _check { | ||
| 13 : | my $self = shift; my $name = $self->{def}{string} || $self->{bop}; | ||
| 14 : | $self->Error("Only one equality is allowed in an equation") | ||
| 15 : | if ($self->{lop}->type eq 'Equality' || $self->{rop}->type eq 'Equality'); | ||
| 16 : | $self->Error("Operands of '$name' must be Numbers") unless $self->checkNumbers(); | ||
| 17 : | $self->{type} = Value::Type('Equality',1); # Make it not a number, to get errors with other operations. | ||
| 18 : | } | ||
| 19 : | |||
| 20 : | # | ||
| 21 : | # Determine if the two sides are equal (use fuzzy reals) | ||
| 22 : | # | ||
| 23 : | sub _eval { | ||
| 24 : | my $self = shift; my ($a,$b) = @_; | ||
| 25 : | $a = Value::makeValue($a) unless ref($a); | ||
| 26 : | $b = Value::makeValue($b) unless ref($b); | ||
| 27 : | dpvc | 2645 | return ($a == $b)? 1 : 0; |
| 28 : | dpvc | 2616 | } |
| 29 : | |||
| 30 : | # | ||
| 31 : | # Add/Remove the equality operator to/from a context | ||
| 32 : | # | ||
| 33 : | sub Allow { | ||
| 34 : | my $self = shift; my $context = shift || $$Value::context; | ||
| 35 : | my $allow = shift; $allow = 1 unless defined($allow); | ||
| 36 : | if ($allow) { | ||
| 37 : | my $prec = $context->{operators}{','}{precedence}; | ||
| 38 : | $prec = 1 unless defined($prec); | ||
| 39 : | $context->operators->add( | ||
| 40 : | '=' => { | ||
| 41 : | class => 'Parser::BOP::equality', | ||
| 42 : | precedence => $prec+.25, # just above comma | ||
| 43 : | associativity => 'left', # computed left to right | ||
| 44 : | type => 'bin', # binary operator | ||
| 45 : | dpvc | 2645 | string => ' = ', # output string for it |
| 46 : | dpvc | 2616 | perl => '==', # perl string |
| 47 : | } | ||
| 48 : | ); | ||
| 49 : | } else {$context->operators->remove('=')} | ||
| 50 : | return; | ||
| 51 : | } | ||
| 52 : | |||
| 53 : | ######################################################################### | ||
| 54 : | |||
| 55 : | 1; |
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |