$ composer require --dev phplrt/phplrt
The built-in tools allow you to easily implement a complete and powerful lexer using the PCRE2 regular expression language.
$lexer->lex('23+42');
The phplrt toolkit provides an EBNF-like grammar compiler based on the Hoa library, which in turn has been expanded and improved.
Expression: Addition() | Subtraction() | Term()
Term: Multiplication() | Division() | Factor()
Factor
: ::T_BRACE_OPEN:: Expression() ::T_BRACE_CLOSE::
| Value()
Subtraction ->
{ return new Ast\Subtraction($children, $offset); }
: Term() ::T_MINUS:: Expression()
Addition ->
{ return new Ast\Addition($children, $offset); }
: Term() ::T_PLUS:: Expression()
Multiplication ->
{ return new Ast\Multiplication($children, $offset); }
: Factor() ::T_MUL:: Term()
| Factor() Term()
Division ->
{ return new Ast\Division($children, $offset); }
: Factor() ::T_DIV:: Term()
Value ->
{ return new Ast\Value($children, $offset); }
: <T_FLOAT> | <T_INT>