Hoa central

Hoa is a modular, extensible and structured set of PHP libraries. Moreover, Hoa aims at being a bridge between industrial and research worlds.


This library provides tools to analyze regular expressions and generate strings based on regular expressions (Perl Compatible Regular Expressions).


With Composer, to include this library into your dependencies, you need to require `hoa/regex`:

```json { "require": { "hoa/regex": "~0.0" } } ```

Please, read the website to get more informations about how to install.

Quick usage

As a quick overview, we propose to see two examples. First, analyze a regular expression, i.e. lex, parse and produce an AST. Second, generate strings based on a regular expression by visiting its AST with an isotropic random approach.

Analyze regular expressions

We need the `Hoa` library to lex, parse and produce an AST of the following regular expression: ab(c|d){2,4}e?. Thus:

```php // 1. Read the grammar. $grammar = new Hoa('hoa://Library/Regex/Grammar.pp');

// 2. Load the compiler. $compiler = Hoa::load($grammar);

// 3. Lex, parse and produce the AST. $ast = $compiler->parse('ab(c|d){2,4}e?');

// 4. Dump the result. $dump = new Hoa(); echo $dump->visit($ast);


We read that the whole expression is composed of a single concatenation of two tokens: a and b, followed by a quantification, followed by another quantification. The first quantification is an alternation of (a choice betwen) two tokens: c and d, between 2 to 4 times. The second quantification is the e token that can appear zero or one time.

We can visit the tree with the help of the `Hoa` library.

Generate strings based on regular expressions

To generate strings based on the AST of a regular expressions, we will use the Hoa\Regex\Visitor\Isotropic visitor:

```php $generator = new Hoa(new Hoa()); echo $generator->visit($ast);


Strings are generated at random and match the given regular expression.


Different documentations can be found on the website: http://hoa-project.net/.


Hoa is under the New BSD License (BSD-3-Clause). Please, see `LICENSE`.