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); }
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())); } }
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); }
public function parse(Grammar $parser, Expr $left, Token $token) { return new PostfixExpr($left, $token->getTag()); }
public function __construct(Token $operator, Expr $right) { $this->operator = $operator->getTag(); $this->right = $right; }
public function prefixParseletForToken(Token $token) { $key = $token->getTag(); return array_key_exists($key, $this->prefix_parselets) ? $this->prefix_parselets[$key] : null; }
public function parse(Grammar $grammar, Expr $left, Token $token) { $right = $grammar->_name(); return new OperatorExpr($left, $token->getTag(), $grammar->parser->resolveScope($right->getPointer())); }