Exemplo n.º 1
0
 /**
  * if(<expr>) [{] <code> [}] [elseif(<expr>) { <code> }]+ [else { <code> }]
  *
  * @param $codeGenerator
  */
 public function parse_if(CodeGenerator $codeGenerator)
 {
     // 'if' eaten
     $prec = new Precedence($this->scanner);
     $prec->run();
     // If
     $token = $this->scanner->next();
     $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope());
     if ($token['code'] == T_LCURLY_PARENTHESIS) {
         $this->parse_body($bodyCode);
         $this->check(T_RCURLY_PARENTHESIS);
     } else {
         $this->scanner->back();
         $this->parser_command($bodyCode);
     }
     $codeGenerator->addIf(new ExprGenerator($prec->getData(), $codeGenerator->getScope()), $bodyCode);
     //$codeGenerator->addVariables($prec->getUsedVariables());
     // Elseif
     $token = $this->scanner->next();
     while ($token['code'] == T_ELSEIF) {
         $prec = new Precedence($this->scanner);
         $prec->run();
         $token = $this->scanner->next();
         $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope());
         if ($token['code'] == T_LCURLY_PARENTHESIS) {
             $this->parse_body($bodyCode);
             $this->check(T_RCURLY_PARENTHESIS);
         } else {
             $this->scanner->back();
             $this->parser_command($bodyCode);
         }
         //$codeGenerator->addVariables($prec->getUsedVariables());
         $codeGenerator->addElseif(new ExprGenerator($prec->getData(), $codeGenerator->getScope()), $bodyCode);
         $token = $this->scanner->next();
     }
     // else
     if ($token['code'] == T_ELSE) {
         $token = $this->scanner->next();
         $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope());
         if ($token['code'] == T_LCURLY_PARENTHESIS) {
             $this->parse_body($bodyCode);
             $this->check(T_RCURLY_PARENTHESIS);
         } else {
             $this->scanner->back();
             $this->parser_command($bodyCode);
         }
         //$codeGenerator->addVariables($prec->getUsedVariables());
         $codeGenerator->addElse($bodyCode);
     } else {
         $this->scanner->back();
     }
 }
Exemplo n.º 2
0
    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) {
    echo "Precedence errror\n";
    echo $e;