Matematikai függvény-ábrázoló

Írj be egy matematikai kifejezést (pl. sin(x)*x) - a szerver PHP-ben, egy SAJÁT, kézzel írt kifejezés-parserrel (tokenizálás → szintaxisfa → biztonságos, fehérlistás kiértékelés) mintavételezi a görbét. Nincs eval(): a bemenet SOSEM válik futtatott kódká, csak egy szigorúan fehérlistás matek-függvénykészlet valamelyikének paramétere lehet.

A ténylegesen lefutó PHP-kód (kivonat)
// Fehérlistás dispatch - KIZÁRÓLAG ez a néhány függvény hívható,
// SOSEM dinamikus "$name(...)" hívás vagy eval()
public static function callOne(string $name, float $x): float
{
    return match ($name) {
        'sin' => sin($x),
        'sqrt' => sqrt($x),
        'ln' => log($x),
        // ...
    };
}

// Osztás/maradék fdiv()/fmod()-mal (nullával osztás -> csendes INF/NAN,
// SOSEM DivisionByZeroError), majd EGYSÉGES NaN/Inf-kapu:
'/' => fdiv($left, $right),
...
if (is_nan($result) || is_infinite($result)) {
    return null; // szakadt pont a grafikonon, nem hiba
}

A szabad változó neve 'x'. Használható konstans: pi, e. Függvények: sin, cos, tan, sqrt, abs, exp, ln, log10, log2, floor, ceil, round, sign, pow(x,n), log(x,alap), min(a,b), max(a,b).

Példák
sin(x)
x^2 - 3*x + 2
1/x
sqrt(x)
sin(x)/x
-10-50510-1-0.500.51A vízszintes tengely x-et, a függőleges y = f(x)-et mutatja. A megszakadó vonal ott van, ahol a függvény az adott pontban nincs értelmezve (pl. nullával osztás). Az üres karikák a görbe gyökeit (f(x) = 0) jelölik, valódi bisection-kereséssel meghatározva.

Gyökök (közelítő x-értékek): -9.4248, -6.2832, -3.1416, 0, 3.1416, 6.2832, 9.4248