face / parser
用于用PHP编写解析器的辅助工具
dev-master
2015-12-04 17:31 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: 4.1.2
- squizlabs/php_codesniffer: ~2
This package is auto-updated.
Last update: 2024-09-06 18:57:43 UTC
README
一个辅助工具,用于使用PHP创建解析器。最初用于解析FQL查询,但也可能用于其他任何用途。
用法
use Face\Parser\RegexpLexer as Lexer; use Face\Parser\TokenNavigation; $lexer = new Lexer(); $lexer->setTokens([ "function" => "T_FUNCTION", "class" => "T_CLASS", "[a-zA-Z_][a-zA-Z0-9_]*" => "T_IDENTIFIER", "\\{" => "T_L_BRACKET", "\\}" => "T_R_BRACKET", "\\(" => "T_L_PARENTHESIS", "\\)" => "T_R_PARENTHESIS", ";" => "T_SEMICOLON", "\\s+" => "T_WHITESPACE" ]); $string = 'class foo{ function bar(){} }'; $tokenArray = $lexer->tokenize($string); $tokens = new TokenNavigation($tokenArray); // Check if the first token is a "class" keyword or throws an exception $tokens->expectToBe("T_CLASS"); $tokens->next(); $tokens->expectToBe("T_IDENTIFIER"); $className = $tokens->current()->getTokenValue(); // while next token is a function keyword while($tokens->hasNext() && $tokens->look(1)->is("T_FUNCTION")){ // Parse the function body someFunctionThatParsesTheFunctionAndJumpsToTheNextToken($tokens); }