123456789101112131415161718192021222324252627282930313233343536 |
- <?php
- namespace JmesPath;
- /**
- * Syntax errors raise this exception that gives context
- */
- class SyntaxErrorException extends \InvalidArgumentException
- {
- /**
- * @param string $expectedTypesOrMessage Expected array of tokens or message
- * @param array $token Current token
- * @param string $expression Expression input
- */
- public function __construct(
- $expectedTypesOrMessage,
- array $token,
- $expression
- ) {
- $message = sprintf("Syntax error at character %d\n", max($token['pos'], 0))
- . $expression . "\n" . str_repeat(' ', max($token['pos'], 0)) . "^\n";
- $message .= !is_array($expectedTypesOrMessage)
- ? $expectedTypesOrMessage
- : $this->createTokenMessage($token, $expectedTypesOrMessage);
- parent::__construct($message);
- }
- private function createTokenMessage(array $token, array $valid)
- {
- return sprintf(
- 'Expected one of the following: %s; found %s "%s"',
- implode(', ', array_keys($valid)),
- $token['type'],
- $token['value']
- );
- }
- }
|