函数名称:Parle\RLexer::push()
适用版本:Parle 0.7.1及以上版本
函数描述:Parle\RLexer::push()方法用于向词法分析器的规则列表中添加一个或多个规则。
用法:
Parle\RLexer::push(string|array $rules): void
参数:
$rules
:添加的规则。可以是一个字符串或一个字符串数组。字符串规则应该遵循Parle词法分析器的规则语法。
示例1:
$lexer = new Parle\RLexer();
// 添加单个规则
$lexer->push('T_STRING [a-zA-Z_][a-zA-Z0-9_]*');
// 添加多个规则
$lexer->push([
'T_NUMBER [0-9]+',
'T_OPERATOR \+|\-|\*|\/',
]);
// 执行词法分析
$tokens = $lexer->lex('1 + 2');
// 输出词法单元
foreach ($tokens as $token) {
echo $token['name'] . ': ' . $token['text'] . PHP_EOL;
}
示例2:
$lexer = new Parle\RLexer();
// 添加多个规则
$lexer->push([
'T_NAME [a-zA-Z_][a-zA-Z0-9_]*',
'T_EMAIL [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}',
]);
// 执行词法分析
$tokens = $lexer->lex('Hello, my email is test@example.com');
// 输出词法单元
foreach ($tokens as $token) {
echo $token['name'] . ': ' . $token['text'] . PHP_EOL;
}
注意事项:
- 添加的规则必须遵循Parle词法分析器的规则语法。
- 在执行词法分析之前,需要先添加所有需要的规则。
- 通过
lex()
方法执行词法分析,返回一个包含词法单元的数组。 - 词法单元的结构为
['name' => '词法单元名称', 'text' => '词法单元文本']
。