*/ class Variable extends TokenLiteral { /** * Name of the variable. * @var string */ protected $name; /** * New variable reference. * * @param string $name */ public function __construct(string $name) { $this->name = $name; } /** * Get the name of the variable. * * @return string */ public function getName(): string { return $this->name; } public static function isToken(string $stream): bool { return (bool)preg_match('/^[A-Za-z]$/', $stream[0]); } public static function getToken(string &$stream): Token { $buffer = ''; $buffer = $stream[0]; for ($i = 1; $i < strlen($stream); $i++) { if (preg_match('/^[A-Za-z0-9]$/', $stream[$i])) { $buffer .= $stream[$i]; } else { break; } } $stream = substr($stream, strlen($buffer)); return new Variable($buffer); } /** * Not valid. Variable replacement should be handled by the expression parser. * * @param ?\App\Util\GraphNode[] $arguments * @throws \Exception if called * @return \App\Util\GraphNode|Token|scalar|null */ public function execute(?array $arguments = null) { throw new \Exception('Unreplaced variable'); } }