函式名稱: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 [email protected]');
// 輸出詞法單元
foreach ($tokens as $token) {
echo $token['name'] . ': ' . $token['text'] . PHP_EOL;
}
注意事項:
- 新增的規則必須遵循Parle詞法分析器的規則語法。
- 在執行詞法分析之前,需要先新增所有需要的規則。
- 透過
lex()
方法執行詞法分析,返回一個包含詞法單元的陣列。 - 詞法單元的結構為
['name' => '詞法單元名稱', 'text' => '詞法單元文字']
。