/**
  * Returns the first tree that can be parsed from $words, given a $Grammar.
  */
 public static function getFirstTree(Grammar $Grammar, array $words)
 {
     $Parser = new EarleyParser($Grammar, $words, true);
     $Parser->parseWords();
     $tree = $Parser->extractFirstTree();
     return $tree;
 }
<?php

/**
 * @author Patrick van Bergen
 */
use earley\parser\EarleyParser;
use earley\reader\GrammarReader;
use earley\parser\SentenceTokenizer;
require_once __DIR__ . '/autoloader.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// sanitize input
$ruleHead = isset($_POST['rule-head']) ? $_POST['rule-head'] : [];
$ruleBody = isset($_POST['rule-body']) ? $_POST['rule-body'] : [];
$sentence = isset($_POST['sentence']) ? $_POST['sentence'] : '';
$grammarReader = new GrammarReader();
$sentenceTokenizer = new SentenceTokenizer();
// create a grammar from user input
$grammar = $grammarReader->readGrammar($ruleHead, $ruleBody);
// create a word array from user input
$words = $sentenceTokenizer->tokenize($sentence);
// parse sentence using Earley algorithm
$parser = new EarleyParser($grammar, $words, false);
$trees = $parser->getAllTrees();
# test: output raw results
print_r($trees);