Пример #1
0
 public function parse(Grammar $grammar, Expr $left, Token $token)
 {
     $args = [];
     $is_bang = '!' === $token->getTag();
     if (!$is_bang) {
         if (!$grammar->parser->is(')')) {
             $args[] = $grammar->_expr();
             while ($grammar->parser->is(';')) {
                 $grammar->parser->consume();
                 $args[] = $grammar->_expr();
             }
         }
         $grammar->parser->match(')');
     }
     return new CallExpr($left, $args, $is_bang);
 }
Пример #2
0
 public function parse(Grammar $grammar, Token $token)
 {
     $tag = $token->getTag();
     switch ($tag) {
         case Tag::T_ATOM:
             return new AtomExpr($grammar->parser->resolveScope($token->getPointer()));
         case Tag::T_STRING:
             return new StringExpr($grammar->parser->resolveScope($token->getPointer()), $token->metadata['delimiter']);
         case Tag::T_DOUBLE:
         case Tag::T_INTEGER:
             return new NumberExpr($grammar->parser->resolveScope($token->getPointer()), $tag === Tag::T_DOUBLE ? 'double' : 'int');
         case Tag::T_NIL:
             return new NilExpr();
         case Tag::T_TRUE:
         case Tag::T_FALSE:
             return new BoolExpr($tag === Tag::T_TRUE);
         case Tag::T_REGEX:
             return new RegexExpr($grammar->parser->resolveScope($token->getPointer()));
     }
 }
Пример #3
0
 public function parse(Grammar $parser, Expr $left, Token $token)
 {
     $right = $parser->_expr($this->precedence - ($this->is_right ? 1 : 0));
     return new OperatorExpr($left, $token->getTag(), $right);
 }
Пример #4
0
 public function parse(Grammar $parser, Expr $left, Token $token)
 {
     return new PostfixExpr($left, $token->getTag());
 }
Пример #5
0
 public function __construct(Token $operator, Expr $right)
 {
     $this->operator = $operator->getTag();
     $this->right = $right;
 }
Пример #6
0
 public function parse(Grammar $grammar, Token $token)
 {
     return new NameExpr($grammar->parser->resolveScope($token->getPointer()));
 }
Пример #7
0
 public function prefixParseletForToken(Token $token)
 {
     $key = $token->getTag();
     return array_key_exists($key, $this->prefix_parselets) ? $this->prefix_parselets[$key] : null;
 }
Пример #8
0
 public function parse(Grammar $grammar, Expr $left, Token $token)
 {
     $right = $grammar->_name();
     return new OperatorExpr($left, $token->getTag(), $grammar->parser->resolveScope($right->getPointer()));
 }