Шаблон "интерпретатор"

Я захотел написать небольшой интерпретатор логических выражений, используя шаблон, собственно, "интерпретатор".

Как я понял, этот шаблон состоит из интерфейса АбстрактногоВыражения, от которого наследуются ПравилаГрамматики и Терминалы. В интерфейсе определён метод Интерпретация(контекст).

Дерево такого выражения создаётся в Клиенте, и Клиент же отправляет в качестве контекста то, что нужно проинтерпретировать.

Получается, что дерево Выражения это формула, а Контекст - это подставляемые в формулу значения? Я правильно всё понимаю?

У меня получилось так:

ДеревоВыражения состоит из операторИ, операторИЛИ, операторНЕ и Терминал.

Логические значения терминалов -- это найдено ли слово, сохранённое в поле Терминала, среди всех слов подаваемого в дерево Контекста.

Кликните здесь для просмотра всего текста

C#Выделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

    public class TerminalExpression : IBinaryExpression
    {
        public TerminalExpression(string Token)
        {
            this.Token = Token;
        }
        public string Token { get; set; }
        public bool Search(List<string> Tags)
        {
            if (Tags.Contains(Token)) 
                return true; 
            else 
                return false;
 
        }
    }

А это диаграмма классов того, что я считаю своей реализацией шаблона:

ссылка на изображение

Ну и, соответственно, все правила просто вызывают Интерпретация(контекст) своих детей.

В итоге корень возвращает, соответствует ли набор меток формуле. Что-то в духе

Выражение, из которого строится дерево: a &&

Контекст/ответ: a/false (a,b)/true (a,c,e)/false

Меня всё вроде бы устраивает, ведь эта штука делает то, чего я от неё добивался.

Но потом я поговорил с одним человеком, и меня заставили сомневаться. Я так и не понял, что именно не так, но из того что я понял следовало, что я понимаю Контекст неправильно, что это должно быть чем-то иным.

Так что вопрос: правильно ли я понял этот шаблон в целом, и значение (Контекст) в нём в частности?