protected function parse($code, $prefix = '<?php ')
 {
     $code = $prefix . $code;
     try {
         return $this->getParser()->parse($code);
     } catch (\PHPParser_Error $e) {
         if (!$this->parseErrorIsEOF($e)) {
             throw ParseErrorException::fromParseError($e);
         }
         try {
             // Unexpected EOF, try again with an implicit semicolon
             return $this->getParser()->parse($code . ';');
         } catch (\PHPParser_Error $e) {
             return false;
         }
     }
 }
 public function testConstructFromParseError()
 {
     $e = ParseErrorException::fromParseError(new \PhpParser\Error('{msg}'));
     $this->assertContains('{msg}', $e->getRawMessage());
     $this->assertContains('PHP Parse error:', $e->getMessage());
 }
 /**
  * Lex and parse a block of code.
  *
  * @see Parser::parse
  *
  * @param string $code
  * @param bool   $requireSemicolons
  *
  * @return array A set of statements
  */
 protected function parse($code, $requireSemicolons = false)
 {
     try {
         return $this->parser->parse($code);
     } catch (\PhpParser\Error $e) {
         if ($this->parseErrorIsUnclosedString($e, $code)) {
             return false;
         }
         if (!$this->parseErrorIsEOF($e)) {
             throw ParseErrorException::fromParseError($e);
         }
         if ($requireSemicolons) {
             return false;
         }
         try {
             // Unexpected EOF, try again with an implicit semicolon
             return $this->parser->parse($code . ';');
         } catch (\PhpParser\Error $e) {
             return false;
         }
     }
 }