Exemplo n.º 1
0
 /**
  * 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));
     }
 }
Exemplo n.º 2
0
 /**
  * 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());
     }
 }