SimpleLexer::addExitPattern PHP Method

addExitPattern() public method

Adds a pattern that will exit the current mode and re-enter the previous one.
public addExitPattern ( string $pattern, string $mode )
$pattern string Perl style regex, but ( and ) lose the usual meaning.
$mode string Mode to leave.
    public function addExitPattern($pattern, $mode)
    {
        if (!isset($this->regexes[$mode])) {
            $this->regexes[$mode] = new ParallelRegex($this->case);
        }
        $this->regexes[$mode]->addPattern($pattern, '__exit');
        if (!isset($this->mode_handlers[$mode])) {
            $this->mode_handlers[$mode] = $mode;
        }
    }

Usage Example

Example #1
0
 function testModeMapping()
 {
     $handler = new MockTestParser();
     $handler->setReturnValue("a", true);
     $handler->expectAt(0, "a", array("aa", LEXER_MATCHED));
     $handler->expectAt(1, "a", array("(", LEXER_ENTER));
     $handler->expectAt(2, "a", array("bb", LEXER_MATCHED));
     $handler->expectAt(3, "a", array("a", LEXER_UNMATCHED));
     $handler->expectAt(4, "a", array("bb", LEXER_MATCHED));
     $handler->expectAt(5, "a", array(")", LEXER_EXIT));
     $handler->expectAt(6, "a", array("b", LEXER_UNMATCHED));
     $handler->expectCallCount("a", 7);
     $lexer = new SimpleLexer($handler, "mode_a");
     $lexer->addPattern("a+", "mode_a");
     $lexer->addEntryPattern("(", "mode_a", "mode_b");
     $lexer->addPattern("b+", "mode_b");
     $lexer->addExitPattern(")", "mode_b");
     $lexer->mapHandler("mode_a", "a");
     $lexer->mapHandler("mode_b", "a");
     $this->assertTrue($lexer->parse("aa(bbabb)b"));
 }
All Usage Examples Of SimpleLexer::addExitPattern