상속: extends Parser
예제 #1
0
파일: Quack.php 프로젝트: quack/quack
 public function read()
 {
     $files = $this->getFileNames();
     $this->inArguments('-v', '--version') && (print $this->getVersionContent());
     $this->inArguments('-h', '--help') && (print $this->getHelpContent());
     array_walk($files, function ($file) {
         if (!file_exists($file)) {
             echo "File [{$file}] not found";
             exit(1);
         }
         try {
             $lexer = new Tokenizer(file_get_contents($file));
             $parser = new TokenReader($lexer);
             $parser->parse();
             echo $parser->format();
         } catch (SyntaxError $e) {
             echo $e;
             exit(1);
         }
     });
 }
예제 #2
0
파일: QuackRepl.php 프로젝트: quack/quack
function readline_callback($command)
{
    $command = trim($command);
    switch (trim($command)) {
        case ':quit':
        case ':q':
            exit;
        case 'show c':
            print_entire_license();
            goto next;
        case '':
            goto next;
        case ':clear':
            $clear = isPOSIX() ? 'clear' : 'cls';
            system($clear);
            goto next;
    }
    $lexer = new Tokenizer($command);
    $parser = new TokenReader($lexer);
    try {
        $global_scope = new Scope();
        $parser->parse();
        $parser->ast->injectScope($global_scope);
        $parser->ast->runTypeChecker();
        /* when */
        // args_have('-a', '--ast') && var_dump($parser->ast);
        /* when */
        args_have('-f', '--format') && $parser->format();
    } catch (\Exception $e) {
        echo $e;
    }
    next:
    if (isPOSIX()) {
        readline_add_history($command);
    }
    install_stream_handler();
}