Parent Directory
|
Revision Log
Revision 2824 - (view) (download) (as text)
| 1 : | dpvc | 2824 | loadMacros("Parser.pl"); |
| 2 : | |||
| 3 : | sub _contextTF_init {}; # don't load it again | ||
| 4 : | |||
| 5 : | ########################################################## | ||
| 6 : | # | ||
| 7 : | # Implements contexts for string-valued answers especially | ||
| 8 : | # for matching problems (where you match against T and F). | ||
| 9 : | # | ||
| 10 : | # Context("TF"); | ||
| 11 : | # | ||
| 12 : | # You can add new strings to the context as needed (or remove old ones) | ||
| 13 : | # via the Context()->strings->add() and Context()-strings->remove() | ||
| 14 : | # methods | ||
| 15 : | # | ||
| 16 : | # ANS(TF_cmp("T","F")); | ||
| 17 : | # | ||
| 18 : | # when there are two answers, the first being "T" and the second being "F". | ||
| 19 : | # | ||
| 20 : | |||
| 21 : | package contextTF::Variable; | ||
| 22 : | |||
| 23 : | sub new { | ||
| 24 : | my $self = shift; my $equation = shift; | ||
| 25 : | my $context = $equation->{context}; | ||
| 26 : | my @strings = grep {not defined($context->strings->get($_)->{alias})} | ||
| 27 : | $context->strings->names; | ||
| 28 : | my $strings = join(', ',@strings[0..$#strings-1]).' or '.$strings[-1]; | ||
| 29 : | $equation->Error("Your answer should be one of $strings"); | ||
| 30 : | } | ||
| 31 : | |||
| 32 : | package contextTF::Formula; | ||
| 33 : | our @ISA = qw(Value::Formula Parser Value); | ||
| 34 : | |||
| 35 : | sub parse { | ||
| 36 : | my $self = shift; | ||
| 37 : | foreach my $ref (@{$self->{tokens}}) { | ||
| 38 : | $self->{ref} = $ref; | ||
| 39 : | contextTF::Variable->new($self) if ($ref->[0] eq 'error'); # display the error | ||
| 40 : | } | ||
| 41 : | $self->SUPER::parse(@_); | ||
| 42 : | } | ||
| 43 : | |||
| 44 : | package main; | ||
| 45 : | |||
| 46 : | $context{TF} = Context("Numeric"); | ||
| 47 : | $context{TF}->parens->undefine('|','{','(','['); | ||
| 48 : | $context{TF}->variables->clear(); | ||
| 49 : | $context{TF}->constants->clear(); | ||
| 50 : | $context{TF}->operators->clear(); | ||
| 51 : | $context{TF}->functions->clear(); | ||
| 52 : | $context{TF}->strings->are( | ||
| 53 : | "T" => {value => 1}, "t" => {alias => "T"}, | ||
| 54 : | "F" => {value => 0}, "f" => {alias => "F"}, | ||
| 55 : | "True" => {alias => "T"}, "False" => {alias => "F"}, | ||
| 56 : | "TRUE" => {alias => "T"}, "FALSE" => {alias => "F"}, | ||
| 57 : | "true" => {alias => "T"}, "false" => {alias => "F"}, | ||
| 58 : | ); | ||
| 59 : | $context{'TF'}->{parser}{Variable} = 'contextTF::Variable'; | ||
| 60 : | $context{'TF'}->{parser}{Formula} = 'contextTF::Formula'; | ||
| 61 : | |||
| 62 : | Context("TF"); | ||
| 63 : | |||
| 64 : | sub TF_cmp { | ||
| 65 : | my $strings = shift; | ||
| 66 : | $strings = [$strings,@_] if (scalar(@_)); | ||
| 67 : | $strings = [$strings] unless ref($strings) eq 'ARRAY'; | ||
| 68 : | return map {String($_)->cmp(showHints=>0,showLengthHints=>0)} @{$strings}; | ||
| 69 : | } | ||
| 70 : |
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |