| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\ExpressionLanguage;/** * Represents a token stream. * * @author Fabien Potencier <fabien@symfony.com> */class TokenStream{    public $current;    private $tokens;    private $position = 0;    private $expression;    /**     * @param array  $tokens     An array of tokens     * @param string $expression     */    public function __construct(array $tokens, $expression = '')    {        $this->tokens = $tokens;        $this->current = $tokens[0];        $this->expression = $expression;    }    /**     * Returns a string representation of the token stream.     *     * @return string     */    public function __toString()    {        return implode("\n", $this->tokens);    }    /**     * Sets the pointer to the next token and returns the old one.     */    public function next()    {        ++$this->position;        if (!isset($this->tokens[$this->position])) {            throw new SyntaxError('Unexpected end of expression', $this->current->cursor, $this->expression);        }        $this->current = $this->tokens[$this->position];    }    /**     * Tests a token.     *     * @param array|int   $type    The type to test     * @param string|null $value   The token value     * @param string|null $message The syntax error message     */    public function expect($type, $value = null, $message = null)    {        $token = $this->current;        if (!$token->test($type, $value)) {            throw new SyntaxError(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s)', $message ? $message.'. ' : '', $token->type, $token->value, $type, $value ? sprintf(' with value "%s"', $value) : ''), $token->cursor, $this->expression);        }        $this->next();    }    /**     * Checks if end of stream was reached.     *     * @return bool     */    public function isEOF()    {        return Token::EOF_TYPE === $this->current->type;    }    /**     * @internal     *     * @return string     */    public function getExpression()    {        return $this->expression;    }}
 |