'; public const EOF = ''; public const BANG = '!'; public const DOLLAR = '$'; public const AMP = '&'; public const PAREN_L = '('; public const PAREN_R = ')'; public const SPREAD = '...'; public const COLON = ':'; public const EQUALS = '='; public const AT = '@'; public const BRACKET_L = '['; public const BRACKET_R = ']'; public const BRACE_L = '{'; public const PIPE = '|'; public const BRACE_R = '}'; public const NAME = 'Name'; public const INT = 'Int'; public const FLOAT = 'Float'; public const STRING = 'String'; public const BLOCK_STRING = 'BlockString'; public const COMMENT = 'Comment'; /** * The kind of Token (see one of constants above). * * @var string */ public $kind; /** * The character offset at which this Node begins. * * @var int */ public $start; /** * The character offset at which this Node ends. * * @var int */ public $end; /** * The 1-indexed line number on which this Token appears. * * @var int */ public $line; /** * The 1-indexed column number at which this Token begins. * * @var int */ public $column; /** @var string|null */ public $value; /** * Tokens exist as nodes in a double-linked-list amongst all tokens * including ignored tokens. is always the first node and * the last. * * @var Token */ public $prev; /** @var Token|null */ public $next; /** * @param mixed $value */ public function __construct(string $kind, int $start, int $end, int $line, int $column, ?Token $previous = null, $value = null) { $this->kind = $kind; $this->start = $start; $this->end = $end; $this->line = $line; $this->column = $column; $this->prev = $previous; $this->next = null; $this->value = $value; } public function getDescription() : string { return $this->kind . ($this->value === null ? '' : ' "' . $this->value . '"'); } /** * @return (string|int|null)[] */ public function toArray() : array { return [ 'kind' => $this->kind, 'value' => $this->value, 'line' => $this->line, 'column' => $this->column, ]; } }