查詢

Parle\RLexer::push()函式—用法及示例

「 向詞法分析器的規則列表中新增一個或多個規則 」


函式名稱: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' => '詞法單元文字']
補充糾錯
熱門PHP函式
分享連結