Пример #1
0
 /**
  * {@inheritdoc}
  */
 public function handle(Reader $reader, TokenStream $stream)
 {
     $match = $reader->findPattern($this->patterns->getNumberPattern());
     if (!$match) {
         return false;
     }
     $stream->push(new Token(Token::TYPE_NUMBER, $match[0], $reader->getPosition()));
     $reader->moveForward(strlen($match[0]));
     return true;
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 public function handle(Reader $reader, TokenStream $stream)
 {
     $match = $reader->findPattern($this->patterns->getIdentifierPattern());
     if (!$match) {
         return false;
     }
     $value = $this->escaping->escapeUnicode($match[0]);
     $stream->push(new Token(Token::TYPE_IDENTIFIER, $value, $reader->getPosition()));
     $reader->moveForward(strlen($match[0]));
     return true;
 }
Пример #3
0
 /**
  * {@inheritdoc}
  */
 public function handle(Reader $reader, TokenStream $stream)
 {
     $quote = $reader->getSubstring(1);
     if (!in_array($quote, array("'", '"'))) {
         return false;
     }
     $reader->moveForward(1);
     $match = $reader->findPattern($this->patterns->getQuotedStringPattern($quote));
     if (!$match) {
         throw new InternalErrorException(sprintf('Should have found at least an empty match at %s.', $reader->getPosition()));
     }
     // check unclosed strings
     if (strlen($match[0]) === $reader->getRemainingLength()) {
         throw SyntaxErrorException::unclosedString($reader->getPosition() - 1);
     }
     // check quotes pairs validity
     if ($quote !== $reader->getSubstring(1, strlen($match[0]))) {
         throw SyntaxErrorException::unclosedString($reader->getPosition() - 1);
     }
     $string = $this->escaping->escapeUnicodeAndNewLine($match[0]);
     $stream->push(new Token(Token::TYPE_STRING, $string, $reader->getPosition()));
     $reader->moveForward(strlen($match[0]) + 1);
     return true;
 }