parser utils

Installs: 5

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/erickjmenezes/resrap

v0.5.1 2025-10-05 15:08 UTC

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

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