#!/usr/bin/php-cgi
\n");
if($_GET['output']=="ascii")
$type = 1;
else if($_GET['output']=="latex")
$type = 2;
else
$type = 0;
?>
Usage Notes:
- Acceptable variables are:
a
, b
, ..., z
.
- Acceptable connectives are:
~
(not), &
(and), |
(or), >
(implication), =
(equivalence), 0
(false), 1
(true), listed in order of operator precedence.
- Use parenthesis to manually specify precedence, e.g.,
~(p&q)
.
='a' && $s<='z');
}
function nullary($s)
{ return($s=='0'||$s=='1');
}
function unary($s)
{ return($s=='~');
}
function binary($s)
{ return($s=='&'||$s=='|'||$s=='>'||$s=='=');
}
function open($s)
{ return($s=='(');
}
function close($s)
{ return($s==')');
}
function legalchars($s)
{ for($i=0; $i
="a" && $formula<="z")
return $valuation[array_search($formula, $variables)];
elseif($formula=="0" || $formula=="1")
return $formula;
elseif(preg_match("/^\(\~((?:\((?1)\)|[^()]*)*)\)$/", $formula, $reg))
return 1-evalb($reg[1], $valuation);
elseif(preg_match("/^\(((?:\((?1)\)|[^()]*)*)&((?:\((?2)\)|[^()]*)*)\)$/", $formula, $reg))
return evalb($reg[1], $valuation) & evalb($reg[2], $valuation);
elseif(preg_match("/^\(((?:\((?1)\)|[^()]*)*)\|((?:\((?2)\)|[^()]*)*)\)$/", $formula, $reg))
return evalb($reg[1], $valuation) | evalb($reg[2], $valuation);
elseif(preg_match("/^\(((?:\((?1)\)|[^()]*)*)>((?:\((?2)\)|[^()]*)*)\)$/", $formula, $reg))
return (1-evalb($reg[1], $valuation)) | evalb($reg[2], $valuation);
elseif(preg_match("/^\(((?:\((?1)\)|[^()]*)*)=((?:\((?2)\)|[^()]*)*)\)$/", $formula, $reg))
return 1-(evalb($reg[1], $valuation) ^ evalb($reg[2], $valuation));
elseif(preg_match("/^\(((?:\((?1)\)|[^()]*)*)\)$/", $formula, $reg))
return evalb($reg[1], $valuation);
}
function insertchar($string, $n, $c)
{ $result = "";
for($i=0; $i=0; $i--)
{ if(open($formula[$i]))
$count--;
elseif(close($formula[$i]))
$count++;
if($count==0)
break;
}
return $i;
}
function nextClose($formula, $n)
{ $count = 0;
for($i=$n+1; $i")
{ $a = prevOpen($formula, $i);
$b = nextClose($formula, $i);
if(!($formula[$a-1]=="(" && $formula[$b+1]==")"))
{ $formula = insertchar($formula, $b+1, ")");
$formula = insertchar($formula, $a, "(");
}
}
for($i=0; $iHTML Output:\n\n");
$openrow = "";
$closerow = $closeheadrow = "
";
$opencell = "";
$closecell = " | ";
$openhead = "";
$closehead = " | ";
$headseparator = " | ";
$separator = " | ";
$openreturn = "";
$closereturn = "";
}
elseif($type==1)
{ echo("ASCII Output:
\n\n");
$headseparator = $separator = " ";
$openreturn = "";
$closereturn = "";
$parenout = " ";
}
elseif($type==2)
{ echo("LaTeX Output:
\n\n\\begin{array}{");
foreach($variables as $x)
echo("c");
echo("|");
for($i=0; $i$s");
elseif($s=="~")
return("¬");
elseif($s=="&")
return("∧");
elseif($s=="|")
return("∨");
elseif($s==">")
return("→");
elseif($s=="=")
return("↔");
else
return($s);
}
elseif($type==1)
return(htmlentities($s));
elseif($type==2)
{ if(variable($s))
return("$s");
elseif($s=="~")
return("\\lnot");
elseif($s=="&")
return("\\land");
elseif($s=="|")
return("\\lor");
elseif($s==">")
return("\\rightarrow");
elseif($s=="=")
return("\\leftrightarrow");
else
return($s);
}
}
$c = 0;
$valuation = array();
echo($openrow);
foreach($variables as $x)
{ echo($openhead.formulaencode($x).$closehead);
$c++;
}
echo($headseparator);
for($i=0; $i", "=")))
{
$a = prevOpen($formula, $j);
$b = nextClose($formula, $j);
echo(evalb(substr($formula, $a-1, $b-$a+3), $valuation));
}
else
echo($parenout);
if($j==$returnindex)
echo($closereturn);
if(!($type==2 && $i==strlen($formula)-1))
echo($closecell);
}
if(!($type==2 && $k==pow(2,$c)-1))
echo("$closerow\n");
}
if($type==0)
echo("
\n");
elseif($type==1)
echo("\n");
elseif($type==2)
echo("\n\\end{array}\n\n");
}
elseif(isset($formula) && $formula=="")
echo("The formula is empty.
");
elseif(isset($formula) && !legalchars($formula))
echo("The formula contains illegal characters.
");
elseif(isset($formula) && !balanced($formula))
echo("The formula has unbalanced parenthesis.
");
elseif(isset($formula) && !wellformed($formula))
echo("The formula is not well-formed.
");
elseif(isset($formula) && !count($variables)<=8)
echo("The formula should have at most 8 variables.
");
?>