erickjmenezes / resrap
parser utils
Installs: 5
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/erickjmenezes/resrap
Requires
- php: ^8.4
Requires (Dev)
- pestphp/pest: ^4.1
This package is auto-updated.
Last update: 2025-10-06 20:34:02 UTC
README
WARNING: This package is not intended for serious usage.
It's not a framework, but it's a good starting point for building your own parser and a regexp-based scanner.
Requirements
- PHP ^8.4
Installation
composer require erickjmenezes/resrap
Examples
Two runnable examples are included.
Math calculator (toy) example
- examples/Math/main.php — entry point
Run it:
composer install php examples/Math/main.php
JSON Parser example
Run it:
composer install php examples/Json/main.php
Quickstart
1. Declare the tokens your program needs
enum MathToken { case NUMBER; case PLUS; case MINUS; case TIMES; case DIV; }
2. Create a Scanner
use Resrap\Component\Scanner\{Scanner, ScannerBuilder, Pattern, ScannerToken}; function create_scanner(): Scanner { return new ScannerBuilder( // skip whitespace new Pattern('[\s\t\n\r]+', ScannerToken::SKIP), // tokens new Pattern('{NUMBER}', MathToken::NUMBER), new Pattern('\+', MathToken::PLUS), new Pattern('-', MathToken::MINUS), new Pattern('\*', MathToken::TIMES), new Pattern('\\/', MathToken::DIV), ) ->aliases([ 'NUMBER' => '[0-9]+', ]) ->build(); }
3. Create grammar rules to parse your tokens
%class MathParser;
%use Whatever\Namespace\Of\MathToken;
%start calculator;
number := MathToken::NUMBER { return $1; }
;
operator := MathToken::PLUS { return $1; }
| MathToken::MINUS { return $1; }
| MathToken::TIMES { return $1; }
| MathToken::DIV { return $1; }
;
expression := number { return $1; }
| number operator expression { return "{$1} {$2} {$3}"; }
;
calculator := expression { return eval("return {$1};"); }
;
4. Generate the parser
php bin/resrap gen my-grammar.r > MathParser.php
5. Use the parser
$parser = new MathParser(create_scanner()); echo $parser->parse('1 + 2 + 3'); // 6