Beispiel #1
0
 public function testUntil()
 {
     $lexer = new Lexer('foo and bar "string\\"end".');
     $this->assertEquals('foo and bar ', $lexer->until(Tokens::T_DOUBLE_QUOTE));
     $lexer->match(Tokens::T_DOUBLE_QUOTE);
     $this->assertEquals('string\\"end', $lexer->until(Tokens::T_DOUBLE_QUOTE));
     $lexer->match(Tokens::T_DOUBLE_QUOTE);
     $lexer = new Lexer('((abc def) (ghi))');
     $this->assertEquals('(', $lexer->match(Tokens::T_COMPOSITE_BEGIN));
     $this->assertEquals('(', $lexer->match(Tokens::T_COMPOSITE_BEGIN));
     $this->assertEquals('abc', $lexer->until(array(Tokens::T_COMPOSITE_END, Tokens::T_COMPOSITE_SEPARATOR)));
     $this->assertEquals(' ', $lexer->match(Tokens::T_COMPOSITE_SEPARATOR));
     $this->assertEquals('def', $lexer->until(array(Tokens::T_COMPOSITE_END, Tokens::T_COMPOSITE_SEPARATOR)));
     $this->assertEquals(')', $lexer->match(Tokens::T_COMPOSITE_END));
     $this->assertEquals(' ', $lexer->match(Tokens::T_COMPOSITE_SEPARATOR));
     $this->assertEquals('(', $lexer->match(Tokens::T_COMPOSITE_BEGIN));
     $this->assertEquals('ghi', $lexer->until(array(Tokens::T_COMPOSITE_END, Tokens::T_COMPOSITE_SEPARATOR)));
     $this->assertEquals(')', $lexer->match(Tokens::T_COMPOSITE_END));
     $this->assertEquals(')', $lexer->match(Tokens::T_COMPOSITE_END));
     $this->assertTrue($lexer->isEol());
 }
Beispiel #2
0
 protected function parseCollection(Lexer $lexer)
 {
     $lexer->match(Tokens::T_COLLECTION_BEGIN);
     $depth = 1;
     $values = array(1 => array());
     do {
         if ($lexer->isNextToken(Tokens::T_COLLECTION_BEGIN)) {
             $depth++;
             $lexer->match(Tokens::T_COLLECTION_BEGIN);
             $values[$depth] = array();
             continue;
         } else {
             if ($lexer->isNextToken(Tokens::T_COLLECTION_END)) {
                 $depth--;
                 $lexer->match(Tokens::T_COLLECTION_END);
                 if (0 == $depth) {
                     break;
                 }
                 // merge closed level values into upper level
                 $values[$depth][] = $values[$depth + 1];
             } else {
                 if ($lexer->isNextToken(Tokens::T_COLLECTION_SEPARATOR)) {
                     $lexer->match(Tokens::T_COLLECTION_SEPARATOR);
                 }
             }
         }
         //
         $literal = $lexer->until(array(Tokens::T_COLLECTION_SEPARATOR, Tokens::T_COLLECTION_END));
         $values[$depth][] = $this->parseLiteral($this->createLexer($literal));
     } while (!$lexer->isEol());
     return $values[1];
 }