public function parse(Parser $parser, Stream $stream) { $expression = $parser->parseExpression($stream); if (!$stream->current()->test(Token::PUNCTUATION, ':')) { return new PrintNode($expression); } return new ExpressionNode($parser->getEnvironment()->getBinaryOperators()->getOperator(':')->createNode($expression, $parser->parseExpression($stream))); }
public function parse(Parser $parser, Stream $stream) { $environment = $parser->getEnvironment(); $node = new TagNode($environment->getTag('for'), ['save_temp_var' => true, 'create_stack' => true, 'variables' => 1]); $node->addChild($parser->parseExpression($stream), 'source'); $temp = $node->addChild(new TempVariableNode('element'), 'loop_variable_0'); $loopBody = $node->addChild(new RootNode(), 'loop_body'); if ($stream->current()->test(Token::IDENTIFIER, 'as')) { $arrayNode = new ArrayNode(); $arrayNode->add($temp, new DataNode($stream->expect(Token::VARIABLE)->getValue())); $setOperator = $parser->getEnvironment()->getBinaryOperators()->getOperator(':'); $varNode = $setOperator->createNode($temp, $arrayNode); $loopBody->addChild(new ExpressionNode($varNode)); $stream->next(); } $stream->expectCurrent(Token::IDENTIFIER, 'using'); $loopBody->addChild($this->helper->createRenderFunctionNode($parser->parseExpression($stream), $temp)); return $node; }
public function parse(Parser $parser, Stream $stream) { $node = new RootNode(); do { $left = $parser->parseExpression($stream); $stream->expectCurrent(Token::PUNCTUATION, ':'); $right = $parser->parseExpression($stream); $setOperator = $parser->getEnvironment()->getBinaryOperators()->getOperator(':'); $varNode = $setOperator->createNode($left, $right); $node->addChild(new ExpressionNode($varNode)); } while ($stream->current()->test(Token::PUNCTUATION, ',')); return $node; }