Php/docs/parle.examples.lexer
Lexer examples
Example #1 Tokenize comma separated integer list
<?phpuse Parle\Token;use Parle\Lexer;use Parle\LexerException;/* name => id */$token = array( "COMMA" => 1, "CRLF" => 2, "DECIMAL" => 3,);/* id => name */$tokenIdToName = array_flip($token);$lex = new Lexer;$lex->push("[\x2c]", $token["COMMA"]);$lex->push("[\r][\n]", $token["CRLF"]);$lex->push("[\d]+", $token["DECIMAL"]);$lex->build();$in = "0,1,2\r\n3,42,5\r\n6,77,8\r\n";$lex->consume($in);do { $lex->advance(); $tok = $lex->getToken(); if (Token::UNKNOWN == $tok->id) { throw new LexerException("Unknown token '{$tok->value}' at offset {$lex->marker}."); } echo "TOKEN: ", $tokenIdToName[$tok->id], PHP_EOL;} while (Token::EOI != $tok->id);
Example #2 Tokenize assign statement
<?phpuse Parle\{Token, Lexer};$lex = new Lexer;$lex->push("\$[a-zA-Z_][a-zA-Z0-9_]*", 1);$lex->push("=", 2);$lex->push("\d+", 3);$lex->push(";", 4);$lex->build();$lex->consume('$x = 42; $y = 24;');do { $lex->advance(); $tok = $lex->getToken(); var_dump($tok);} while (Token::EOI != $tok->id);