Phlexy\LexerFactory\Stateless\UsingPregReplace::createLexer PHP Method

createLexer() public method

public createLexer ( array $lexerDefinition, $additionalModifiers = '' )
$lexerDefinition array
    public function createLexer(array $lexerDefinition, $additionalModifiers = '')
    {
        $regexes = array_keys($lexerDefinition);
        $compiledRegex = $this->dataGen->getCompiledRegexForPregReplace($regexes, $additionalModifiers);
        $offsetToLengthMap = $this->dataGen->getOffsetToLengthMap($regexes);
        $offsetToTokenMap = array_combine(array_keys($offsetToLengthMap), $lexerDefinition);
        return new \Phlexy\Lexer\Stateless\UsingPregReplace($compiledRegex, $offsetToTokenMap, $offsetToLengthMap);
    }

Usage Example

コード例 #1
0
ファイル: parser.php プロジェクト: igorw/edn
function tokenize($edn)
{
    $factory = new UsingPregReplace(new LexerDataGenerator());
    $delim = function ($pattern) {
        return "(?:{$pattern})(?=[\\s,\\)\\]\\};]|\$)";
    };
    $lexer = $factory->createLexer([';(?:.*)(?:\\n)?' => 'comment', '#_[\\s,]?' => 'discard', $delim('nil|true|false') => 'literal', $delim('"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"') => 'string', '[\\s,]' => 'whitespace', $delim('\\\\(?:newline|return|space|tab|formfeed|.)') => 'character', $delim('(?:[+-])?\\d+N?') => 'int', $delim('(?:[+-])?\\d+(\\.\\d+)?(?:[eE][-+]?\\d+)?M?') => 'float', $delim(get_symbol_regex()) => 'symbol', $delim(':(?:' . get_symbol_regex() . ')') => 'keyword', $delim('#(?:' . get_symbol_regex() . ')') => 'tag', '\\(' => 'list_start', '\\)' => 'list_end', '\\[' => 'vector_start', '\\]' => 'vector_end', '#\\{' => 'set_start', '\\{' => 'map_start', '\\}' => 'map_set_end']);
    $tokens = $lexer->lex($edn);
    return $tokens;
}
All Usage Examples Of Phlexy\LexerFactory\Stateless\UsingPregReplace::createLexer