Treci la conținutul principal

Ce este

Șablonul Interpreter evaluează propoziții dintr-un limbaj mic construind un arbore de obiecte-expresie — 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 Interpret() pe rădăcină evaluează întreaga expresie.

Fiecare nod se interpretează pe sine

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

Prompt
Scrie un program Go cu șablonul Interpreter: o interfață Expression cu Interpret, noduri Number, Add și Subtract, plus o funcție parse care transformă un șir precum „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: program Go și rezultatul capturat

Când să îl folosești

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

Evită-l când „limbajul” înseamnă trei opțiuni fixe (folosește un switch) — sau când e un limbaj real (folosește un generator de parsere ori un motor existent).


Avantaje și dezavantaje

Avantaje: gramatica se transpune unu la unu în tipuri mici; operațiile noi înseamnă tipuri noi de noduri; arborii de expresii pot fi construiți, verificați și reutilizați.

Dezavantaje: devine incomod pe măsură ce gramatica crește; analiza sintactică tot trebuie scrisă; performanța este modestă față de logica compilată.