/** * Consume * * @param [:text.parse.Rule] $rules * @param text.parse.Tokens $tokens * @param var[] $values * @return text.parse.Consumed */ public function consume($rules, $tokens, $values) { if (!$this->started) { $first = $tokens->token(); if ($first === $this->open) { $tokens->forward(); } else { return new Unexpected($tokens->nameOf($first) . ', expecting ' . $this->open, $tokens->line()); } } if (null === ($block = $tokens->block($this->open, $this->close))) { return new Unexpected('End of file', $tokens->line()); } else { return new Values(trim($block)); } }
/** * Consume * * @param [:text.parse.Rule] $rules * @param text.parse.Tokens $tokens * @param var[] $values * @return text.parse.Consumed */ public function consume($rules, $tokens, $values) { $token = $tokens->token(); if ($token[0] === $this->token) { $tokens->forward(); return new Values(is_array($token) ? $token[1] : $token); } else { return new Unexpected(sprintf('Unexpected %s, expecting %s', is_array($token) ? token_name($token[0]) : $token, is_int($this->token) ? token_name($this->token) : $this->token), $tokens->line()); } }