if (is_null($tokenElement)) {
                // FIXME: useful?
                throw new Exception("Internal error: '{$token}' not recognized");
            } else {
                $tokenList->add($tokenElement);
            }
        }
        // echo "Vidu '$tokenList'<br>\n";
        return $tokenList;
    }
    function __toString()
    {
        return self::$regexp;
    }
}
Tokenizer::setRegexp();
class Analyser
{
    static function analyse($expression)
    {
        if (is_string($expression)) {
            $tokenizer = new Tokenizer();
            $tokens = $tokenizer->tokenize($expression);
        } else {
            // a yet formed ListOfToken
            $tokens = $expression;
        }
        // echo "Testaĵo unu: '$tokens'<br>";
        foreach (Token::$tokenStickness as $operator) {
            // echo "Testaĵo du: '$tokens'<br>";
            if ($operator->reversedOrderParsing) {