<?php
class FastPHPExitSignalReceivedException extends Exception {
}
abstract class FastPHPIcon {
private $type; // arbitary identifier
private $visibility; // 1=private, 2=protected, 3=public(default)
private $abstractFinal; // 'A', 'F', ''(default)
private $static; // true, false(default)
$this->type = $type;
}
return $this->type;
}
public function setAbstract() {
$this->abstractFinal = 'A';
}
public function isAbstract() {
return $this->abstractFinal == 'A';
}
public function setFinal() {
$this->abstractFinal = 'F';
}
public function isFinal() {
return $this->abstractFinal == 'F';
}
public function setStatic() {
$this->static = true;
}
public function isStatic() {
return $this->static;
}
public function setPrivate() {
$this->visibility = 1;
}
public function isPrivate() {
return $this->visibility == 1;
}
public function setProtected() {
$this->visibility = 2;
}
public function isProtected() {
return $this->visibility == 2;
}
public function setPublic() {
$this->visibility = 3;
}
public function isPublic() {
return $this->visibility == 3;
}
public function reset() {
$this->type = null;
$this->visibility = 3;
$this->abstractFinal = '';
$this->static = false;
}
public function __construct() {
}
public abstract function imageIndex();
}
class FastPHPReader {
public static function readCodeFromEditor() {
while ($f = fgets(STDIN
)){
if (trim($f) == SIGNAL_END_OF_TRANSMISSION
) break;
// Signal to terminate the code explorer
if (trim($f) == SIGNAL_TERMINATE
) {
throw new FastPHPExitSignalReceivedException();
}
$lines[] = $f;
}
}
}
class FastPHPWriter {
public static function outputLeafNode(/*FastPHPIcon*/ $icon, /*int*/ $lineNo, /*string*/ $description) {
$iconImageIndex = is_null($icon) ?
-1 : $icon->imageIndex();
echo 'N'.($iconImageIndex == -1 ?
'____' : sprintf('%04s', $iconImageIndex)).
"\n";
}
public static function outputIncreaseLevel() {
echo "I\n";
}
public static function outputDecreaseLevel() {
echo "D\n";
}
public static function outputExit() {
echo "X\n";
}
public static function signalOutputEnd() {
echo "\n".SIGNAL_END_OF_TRANSMISSION."\n";
}
public static function outputHeader() {
echo "FAST100!";
}
}