Is this the kind of thing you are looking for?
#!/usr/bin/perl # http://perlmonks.org/?node_id=1210791 use strict; use warnings; sub error { die s/\G/ *** Expected @_ -->/r, "\n" } sub want { /\G\s+/gc; /\G\Q$_[1]\E/gc ? shift : error "'$_[1]'" } sub expr { my $p = shift; /\G\s+/gc; my $value = /\G(T|F)/gc ? $1 : /\G\(/gc ? want expr(0), ')' : error "Operand"; $value = /\G\s+/gc ? $value : $p <= 1 && /\G\&\&/gc ? $value eq 'T' ? expr(2) : (expr(2), 'F') : $p <= 0 && /\G\|\|/gc ? $value eq 'T' ? (expr(1), 'T') : expr(1) : return $value while 1; } while(<DATA>) { my $answer = expr(0); /\G\s*\z/ or error "Complete Parse"; print tr/\n//dr, " = $answer\n"; } __DATA__ (T && F) || (F && F) (T && T) || (F && F) (T && F) || T
Outputs:
(T && F) || (F && F) = F (T && T) || (F && F) = T (T && F) || T = T
In reply to Re: Evaluate arbitrary boolean expressions
by tybalt89
in thread Evaluate arbitrary boolean expressions
by gauss76
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |