/** * Consume * * @param [:text.parse.Rule] $rules * @param text.parse.Tokens $tokens * @param var[] $values * @return text.parse.Consumed */ public function consume($rules, $tokens, $values) { while (isset($this->tokens[$tokens->token()[0]])) { $token = $tokens->token(); $values[] = is_array($token) ? $token[1] : $token; $tokens->forward(); } return new Values($values); }
/** * Consume * * @param [:text.parse.Rule] $rules * @param text.parse.Tokens $tokens * @param var[] $values * @return text.parse.Consumed */ public function consume($rules, $tokens, $values) { $case = $tokens->token(); if (isset($this->lookup[$case[0]])) { $tokens->forward(); return $this->lookup[$case[0]]->consume($rules, $tokens, [is_array($case) ? $case[1] : $case]); } else { return new Unexpected(sprintf('Unexpected %s, expecting to match %s', $tokens->nameOf($case), implode(', ', array_map([$tokens, 'nameOf'], array_keys($this->lookup)))), $tokens->line()); } }
/** * 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()); } }
/** * Consume * * @param [:text.parse.Rule] $rules * @param text.parse.Tokens $tokens * @param var[] $values * @return text.parse.Consumed */ public function consume($rules, $tokens, $values) { $text = ''; do { $token = $tokens->token(); if ("\n" === $token) { break; } else { $text .= is_array($token) ? $token[1] : $token; } $tokens->forward(); } while ($token); return new Values(trim($text)); }
/** * 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)); } }