@ 2014-06-14T15:34:12Z <?php
namespace Fu {
final class Exception extends \Exception {
}
final class Token {
public $tokenType;
public $content;
public $contentLength;
final public function __construct($tokenType, $content, $contentLength) {
$this->tokenType = $tokenType;
$this->content = $content;
$this->contentLength = $contentLength;
}
}
final class Parser {
const FU_TOKENTYPE_WHITESPACE = 0x00000001;
const FU_TOKENTYPE_DATATYPE_CHAR = 0x00000002;
const FU_TOKENTYPE_VARIABLE = 0x00000003;
const FU_TOKENTYPE_SEMICOLON = 0x00000004;
const FU_TOKENTYPE_ASSIGN = 0x00000005;
const FU_TOKENTYPE_LITERAL_INTEGER = 0x00000006;
const FU_TOKENTYPE_OPERATOR_ADD = 0x00000007;
const FU_SCOPE_ROOT = 0x00000001;
const FU_SCOPE_DECLARATION_VARIABLE = 0x00000002;
const FU_SCOPE_
final public static function parse($source) {
$tokens = [];
while ($source !== '') {
$token = NULL;
switch (substr($source, 0, 1)) {
case ' ':
case "\t":
case "\n":
$i = 1;
while ($source{$i} === ' ' || $source{$i} === "\t" || $source{$i} === "\n") {
++$i;
}
$tokens[] = new Token(self::FU_TOKENTYPE_WHITESPACE, substr($source, 0, $i), $i);
$source = substr($source, $i);
break;
case 'c':
if (substr($source, 0, 4) === 'char') {
$tokens[] = new Token(self::FU_TOKENTYPE_DATATYPE_CHAR, 'char', 4);
$source = substr($source, 4);
} else {
throw new Exception('Parse error at line x, position x; unidentified symbol');
}
break;
case '$':
$i = 1;
while (in_array($source{$i}, ['_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'])) {
++$i;
}
$tokens[] = new Token(self::FU_TOKENTYPE_VARIABLE, substr($source, 0, $i), $i);
$source = substr($source, $i);
break;
case ';':
$tokens[] = new Token(self::FU_TOKENTYPE_SEMICOLON, ';', 1);
$source = substr($source, 1);
break;
case '=':
$tokens[] = new Token(self::FU_TOKENTYPE_ASSIGN, '=', 1);
$source = substr($source, 1);
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
$i = 1;
while (in_array($source{$i}, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])) {
++$i;
}
// TODO: float parsing
$tokens[] = new Token(self::FU_TOKENTYPE_LITERAL_INTEGER, substr($source, 0, $i), $i);
$source = substr($source, $i);
break;
case '+':
$tokens[] = new Token(self::FU_TOKENTYPE_ADD, '+', 1);
$source = substr($source, 1);
break;
}
}
return $tokens;
}
}
}
namespace {
var_dump(Fu\Parser::parse('char $x;$x=1+2;'));
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.4.29 0.016 0.046 12.52 5.4.28 0.013 0.047 12.42 5.4.27 0.014 0.049 12.42 5.4.26 0.014 0.048 12.42 5.4.25 0.012 0.052 12.42 5.4.24 0.011 0.051 12.42 5.4.23 0.007 0.057 12.41 5.4.22 0.013 0.041 12.41 5.4.21 0.006 0.038 12.41 5.4.20 0.015 0.054 12.41 5.4.19 0.017 0.054 12.41 5.4.18 0.016 0.050 12.41 5.4.17 0.008 0.049 12.41 5.4.16 0.012 0.048 12.41 5.4.15 0.011 0.047 12.41 5.4.14 0.006 0.055 12.10 5.4.13 0.010 0.048 12.08 5.4.12 0.007 0.050 12.04 5.4.11 0.007 0.051 12.04 5.4.10 0.010 0.044 12.04 5.4.9 0.006 0.047 12.04 5.4.8 0.010 0.046 12.04 5.4.7 0.010 0.047 12.04 5.4.6 0.012 0.046 12.03 5.4.5 0.007 0.052 12.03 5.4.4 0.006 0.051 12.02 5.4.3 0.014 0.071 12.02 5.4.2 0.015 0.060 12.02 5.4.1 0.015 0.104 12.02 5.4.0 0.010 0.050 11.52 5.3.28 0.012 0.065 12.71 5.3.27 0.015 0.068 12.72 5.3.26 0.023 0.070 12.72 5.3.25 0.009 0.055 12.72 5.3.24 0.011 0.053 12.72 5.3.23 0.010 0.051 12.71 5.3.22 0.005 0.059 12.68 5.3.21 0.010 0.055 12.68 5.3.20 0.008 0.054 12.68 5.3.19 0.006 0.056 12.68 5.3.18 0.008 0.054 12.68 5.3.17 0.005 0.057 12.67 5.3.16 0.011 0.051 12.67 5.3.15 0.006 0.056 12.67 5.3.14 0.006 0.056 12.66 5.3.13 0.008 0.057 12.66 5.3.12 0.006 0.061 12.66 5.3.11 0.008 0.060 12.66 5.3.10 0.014 0.056 12.14 5.3.9 0.007 0.058 12.13 5.3.8 0.010 0.052 12.11 5.3.7 0.010 0.052 12.11 5.3.6 0.012 0.050 12.10 5.3.5 0.010 0.052 12.04 5.3.4 0.014 0.052 12.04 5.3.3 0.012 0.052 12.00 5.3.2 0.010 0.051 11.79 5.3.1 0.016 0.060 11.75 5.3.0 0.006 0.058 11.74
preferences:dark mode live preview
137.6 ms | 1394 KiB | 7 Q