...
Der nachfolgende Code stellt einen Beispiel-Lexer dar, welcher eine Zeichenkette in die entsprechenden Symbole zerlegt, auswertet und das Ergebnis bereitstellt.
Codeblock | ||||
---|---|---|---|---|
| ||||
use Brandbox\Framework\Brandbox\Lexer; class CustomLexer extends Lexer\LexerAbstract { public string $identifier; public string|bool $parameter1; public string|bool $parameter2; protected function getApplicableTokens(): array { return [ Lexer\Lib\Token\CommaToken::class, Lexer\Lib\Token\EqualToken::class, Lexer\Lib\Token\BooleanToken::class, Lexer\Lib\Token\IdentifierToken::class, Lexer\Lib\Token\OpenParenthesisToken::class, Lexer\Lib\Token\CloseParenthesisToken::class, Lexer\Lib\Token\DoubleQuotedStringToken::class, ]; } protected function parse(): void { $this->identifier = $this ->match(Lexer\Lib\Token\IdentifierToken::class) ->get() ; $this->match(Lexer\Lib\Token\OpenParenthesisToken::class); $next = $this->glimpse(); if($next instanceof Lexer\Lib\Token\DoubleQuotedStringToken) { $this->parameter1 = $this ->match(Lexer\Lib\Token\DoubleQuotedStringToken:class) ->get() ; } elseif($next instanceof Lexer\Lib\Token\BooleanToken) { $this->parameter1 = $this ->match(Lexer\Lib\Token\BooleanToken:class) ->get() ; } $this->match(Lexer\Lib\Token\CommaToken::class); $next = $this->glimpse(); if($next instanceof Lexer\Lib\Token\DoubleQuotedStringToken) { $this->parameter2 = $this ->match(Lexer\Lib\Token\DoubleQuotedStringToken:class) ->get() ; } elseif($next instanceof Lexer\Lib\Token\BooleanToken) { $this->parameter2 = $this ->match(Lexer\Lib\Token\BooleanToken:class) ->get() ; } $this->match(Lexer\Lib\Token\CloseParenthesisToken::class); } } $lexer = new CustomLexer(); $lexer->process('Something(false, "strange")'); // Inhalt von $lexer // $lexer->identifier = 'Something' // $lexer->parameter1 = false // $lexer->parameter2 = 'strange' $lexer->process('"Inkorrekt"(Identifikator, true)'); // LexerException: could not parse ... |
...