$TYPE_STRING = 200; $TYPE_CHARACTER = 300; $TYPE_FUNCTION = 400; $TYPE_FLAG = 500; if (!empty($stack)) { echo "<table class='table table-bordered'>"; $i = 0; while ($i <= count($stack)) { if ($types[$i] == $TYPE_NUMBER) { echo "<tr><td>{$i}</td><td>#" . $stack[$i] . "</td></tr>"; } if ($types[$i] == $TYPE_CHARACTER) { echo "<tr><td>{$i}</td><td>\$" . chr($stack[$i]) . "</td></tr>"; } if ($types[$i] == $TYPE_STRING) { echo "<tr><td>{$i}</td><td>'" . slice_to_string($stack[$i]) . "'</td></tr>"; } if ($types[$i] == $TYPE_FUNCTION) { echo "<tr><td>{$i}</td><td>&" . $stack[$i] . "</td></tr>"; } if ($types[$i] == $TYPE_FLAG) { if ($stack[$i] == -1) { echo "<tr><td>{$i}</td><td>true</td></tr>"; } if ($stack[$i] == 0) { echo "<tr><td>{$i}</td><td>false</td></tr>"; } if ($stack[$i] != 0 && $stack[$i] != -1) { echo "<tr><td>{$i}</td><td>malformed flag</td></tr>"; } }
function stack_change_type($type) { global $TYPE_NUMBER, $TYPE_STRING, $TYPE_CHARACTER, $TYPE_FUNCTION, $TYPE_FLAG; global $types; if ($type == $TYPE_NUMBER) { if (stack_type() == $TYPE_STRING) { $a = stack_pop(); if (is_numeric(slice_to_string($a))) { stack_push(floatval(slice_to_string($a)), $TYPE_NUMBER); } else { stack_push(0, $TYPE_NUMBER); } } else { array_pop($types); array_push($types, $TYPE_NUMBER); } } elseif ($type == $TYPE_STRING) { if (stack_type() == $TYPE_NUMBER) { stack_push(string_to_slice(strval(stack_pop())), $TYPE_STRING); } elseif (stack_type() == $TYPE_CHARACTER) { $s = " "; $s[0] = chr(stack_pop()); stack_push(string_to_slice($s), $TYPE_STRING); } elseif (stack_type() == $TYPE_FLAG) { $s = stack_pop(); if ($s == -1) { stack_push(string_to_slice('true'), $TYPE_STRING); } elseif ($s == 0) { stack_push(string_to_slice('false'), $TYPE_STRING); } else { stack_push(string_to_slice('malformed flag'), $TYPE_STRING); } } elseif (stack_type() == $TYPE_FUNCTION) { array_pop($types); array_push($types, $TYPE_STRING); } else { return 0; } } elseif ($type == $TYPE_CHARACTER) { if (stack_type() == $TYPE_STRING) { $s = slice_to_string(stack_pop()); stack_push(ord($s[0]), $TYPE_CHARACTER); } else { $s = stack_pop(); stack_push(intval($s), $TYPE_CHARACTER); } } elseif ($type == $TYPE_FUNCTION) { array_pop($types); array_push($types, $TYPE_FUNCTION); } elseif ($type == $TYPE_FLAG) { if (stack_type() == $TYPE_STRING) { $s = slice_to_string(stack_pop()); if ($s == 'true') { stack_push(-1, $TYPE_FLAG); } elseif ($s == 'false') { stack_push(0, $TYPE_FLAG); } else { stack_push(1, $TYPE_FLAG); } } else { $s = stack_pop(); stack_push($s, $TYPE_FLAG); } } else { return; } }
} foreach ($errors as $err) { echo "{$err}"; } $errors = array(); } $TYPE_NUMBER = 100; $TYPE_STRING = 200; $TYPE_CHARACTER = 300; $TYPE_FUNCTION = 400; $TYPE_FLAG = 500; $i = 0; while ($i < count($stack)) { if ($types[$i] == $TYPE_NUMBER) { echo $i, "\t", ' #', $stack[$i]; } if ($types[$i] == $TYPE_CHARACTER) { echo $i, "\t", ' $', chr($stack[$i]); } if ($types[$i] == $TYPE_STRING) { echo $i, "\t", " '", slice_to_string($stack[$i]), "'"; } if ($types[$i] == $TYPE_FUNCTION) { echo $i, "\t", ' &', $stack[$i]; } if ($types[$i] == $TYPE_FLAG) { echo $i, "\t", ' FLAG: ', $stack[$i]; } echo "\n"; $i += 1; }
} $errors = array(); } $TYPE_NUMBER = 100; $TYPE_STRING = 200; $TYPE_CHARACTER = 300; $TYPE_FUNCTION = 400; $TYPE_FLAG = 500; $i = 0; while ($i < count($stack)) { if ($types[$i] == $TYPE_NUMBER) { echo $i, ' #', $stack[$i], '<br>'; } if ($types[$i] == $TYPE_CHARACTER) { echo $i, ' $', chr($stack[$i]), '<br>'; } if ($types[$i] == $TYPE_STRING) { echo $i, " '", slice_to_string($stack[$i]), "'<br>"; } if ($types[$i] == $TYPE_FUNCTION) { echo $i, ' &', $stack[$i], '<br>'; } if ($types[$i] == $TYPE_FLAG) { echo $i, ' FLAG: ', $stack[$i], '<br>'; } echo "\n"; $i += 1; } foreach ($dictionary_names as $n) { // echo $n."\n"; }