Treci la conținutul principal

Ce este

Șablonul Interpreter evaluează propoziții dintr-un limbaj mic construind un arbore de obiecte-expresii — fiecare nod știe cum să se interpreteze pe sine. Numerele se interpretează ca ele însele; un nod de adunare își interpretează cele două părți și le adună.

Se potrivește limbajelor mici: filtre, formule, reguli simple. Limbajele reale merită unelte reale de analiză sintactică.


Exemplu: un calculator minuscul

Intrarea 3 + 4 - 2 devine un arbore de noduri Number, Add și Subtract. Un singur apel al interpret() pe rădăcină evaluează toată expresia.

Fiecare nod se interpretează pe sine

parse construiește arborele de la stânga la dreapta; interpret() îl parcurge. Suportul pentru * ar fi o singură clasă de nod nouă — cele existente rămân neatinse.

Prompt
Scrie un script PHP cu șablonul Interpreter: o interfață Expression cu interpret, nodurile Number, Add și Subtract, plus o funcție parse care transformă un șir de caractere ca "3 + 4 - 2" într-un arbore de expresii, de la stânga la dreapta. Interpretează expresia și afișează ecuația împreună cu rezultatul ei.
Ieșire: script PHP

Când să îl folosești

Folosește-l atunci când utilizatorii sau fișierele de configurare exprimă logică într-un limbaj mic proiectat de tine: filtre de căutare, formule de preț, reguli de validare.

Renunță la el când „limbajul” are trei opțiuni fixe (folosește un match) — sau când este un limbaj real (folosește un generator de parsere ori un motor existent).


Avantaje și dezavantaje

Avantaje: gramatica se transpune unu-la-unu în clase mici; operațiile noi sunt clase de nod noi; arborii de expresii pot fi construiți, verificați și reutilizați.

Dezavantaje: devine chinuitor odată ce gramatica crește; analiza sintactică tot trebuie scrisă; performanța este modestă în comparație cu logica compilată.