1: <?php
2:
3: namespace BN\Compiler\Scanner;
4:
5: class LexemeToToken
6: {
7: private $lexers = array();
8: private $unknown;
9:
10: public function __construct(LexemeConverter $unknownLexeme)
11: {
12: $this->unknown = $unknownLexeme;
13: }
14:
15: public function registerLexer(LexemeConverter $lexer)
16: {
17: $this->lexers[] = $lexer;
18: }
19:
20: public function lexemeToToken($originalLexeme)
21: {
22: $lexeme = $originalLexeme;
23: while ($lexeme !== '') {
24: foreach ($this->lexers as $lexer) {
25: if ($lexer->canConvertLexeme($lexeme)) {
26: return $lexer->convertLexeme($lexeme);
27: }
28: }
29: $lexeme = mb_substr($lexeme, 0, -1, 'UTF-8');
30: }
31: return $this->unknown->convertLexeme($originalLexeme);
32: }
33: }
34: