/** * @param AbstractVisitor $visitor * @param Token $token * @param string $type * @param Context $context * @return array */ public function serializeToken(AbstractVisitor $visitor, Token $token, $type, Context $context) { $data = []; foreach ($token->getData() as $key => $datum) { $datumType = $this->getType($datum); $type = ['name' => $datumType, 'params' => []]; $argsData = ''; if ($type['name'] === 'array') { $argsData = []; foreach ($datum as $arrayKey => $arrayData) { $arrayType = ['name' => $this->getType($arrayData), 'params' => []]; $argsData[] = ['key' => $arrayKey, 'args' => $context->accept($arrayData, $arrayType), 'type' => $arrayType]; } } else { $argsData = $context->accept($datum, $type); } $args = ['key' => $key, 'args' => $argsData, 'type' => $type]; $data[] = $args; } $data = array('data' => $data, 'location' => $token->getLocation()); $visitor->setRoot($data); return $data; }