public function next(Scanner $scan) { // @todo: make \s skipping customizable do { // echo "\n\t{$this->name}: ".$scan->token(); $scan->next(); // echo ", ".$scan->token()."\n"; } while ($scan->type() === Scanner::WHITESPACE); }
/** * [type] $name [= default] * * @return array * @throws Exception */ public function parse_args() { $token = $this->scanner->next(); if ($token['code'] === T_RPARENTHESIS) { // No arguments $this->scanner->back(); return []; } $arg = ['type' => 'mixed', 'name' => NULL, 'value' => [FALSE, NULL]]; if ($token['code'] === T_ARRAY || $token['code'] === T_STRING) { // type $arg['type'] = $token['value']; $token = $this->scanner->next(); } if ($token['code'] === T_VARIABLE) { $arg['name'] = $token['value']; $token = $this->scanner->next(); } if ($token['code'] === T_ASSIGN) { $token = $this->scanner->next(); $arg['value'] = [TRUE, $token['value']]; if ($token['value'] == '[') { // TODO: allow initialization with non-empty arrays $this->check(T_ARRAY_CLOSE); } $token = $this->scanner->next(); } if ($token['code'] === T_RPARENTHESIS) { $this->scanner->back(); if (is_null($arg['name'])) { return []; } return [$arg]; } elseif ($token['code'] == T_COMMA) { return array_merge([$arg], $this->parse_args()); } }
*/ if (PHP_VERSION_ID < 50501) { echo "Neni splnena minimalni verze PHP 5.5"; exit(15); } require_once __DIR__ . '/lib/debug.php'; require_once __DIR__ . '/scanner/Scanner.php'; require_once __DIR__ . '/parser/Parser.php'; require_once __DIR__ . '/precedence/Precedence.php'; if ($argc < 2) { die("Wrong argument count. Usage is:\n\t./app source.php [--precedence]\n\tor\n\t./app folder"); } try { $scanner = new Scanner($argv[1]); if ($argc > 2 and $argv[2] == '--precedence') { $scanner->next(); // Skip open tag $precedence = new Precedence($scanner); $precedence->run(); echo "Generated expression: " . $precedence->getCode() . "\n"; } else { $parser = new Parser($scanner); $parser->parse_file(); } } catch (EndOfFileException $e) { echo "Code:\n\n\n"; $code = $parser->generator->getCode(); file_put_contents('test.cpp', $code); echo $code; echo "\n\n\nDone\n"; } catch (PrecedenceException $e) {