@startuml
/' INTERPRETER '/



class Client

class Context {
    - token
    - private_map
    + set(in token, in bool)
    + get(in token) : bool
}

interface AbstractExpression {
    # interpret()
}

class TerminalExpression {
    - private_token
    + interpret() : Context
}

class NonterminalExpression {
    - private_AbstractExp1
    - private_AbstractExp2
    + interpret() : Context
}

hide empty members

Context <- Client
Client --> AbstractExpression
AbstractExpression <|-- TerminalExpression
AbstractExpression <|-- NonterminalExpression
AbstractExpression --* NonterminalExpression

note as N1
    <b><color:royalBlue>Interpreter</color></b>
    <b>Type:</b> Behavioral
    Permet de décrire une grammaire pour un
    langage et d'instancier son interpreteur.
end note
@enduml