SyntaxErrorException.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <?php
  2. namespace JmesPath;
  3. /**
  4. * Syntax errors raise this exception that gives context
  5. */
  6. class SyntaxErrorException extends \InvalidArgumentException
  7. {
  8. /**
  9. * @param string $expectedTypesOrMessage Expected array of tokens or message
  10. * @param array $token Current token
  11. * @param string $expression Expression input
  12. */
  13. public function __construct(
  14. $expectedTypesOrMessage,
  15. array $token,
  16. $expression
  17. ) {
  18. $message = "Syntax error at character {$token['pos']}\n"
  19. . $expression . "\n" . str_repeat(' ', $token['pos']) . "^\n";
  20. $message .= !is_array($expectedTypesOrMessage)
  21. ? $expectedTypesOrMessage
  22. : $this->createTokenMessage($token, $expectedTypesOrMessage);
  23. parent::__construct($message);
  24. }
  25. private function createTokenMessage(array $token, array $valid)
  26. {
  27. return sprintf(
  28. 'Expected one of the following: %s; found %s "%s"',
  29. implode(', ', array_keys($valid)),
  30. $token['type'],
  31. $token['value']
  32. );
  33. }
  34. }