skip to Main Content

Welcome

Say hello to the toggle bar. This is an optional section you can use to display any content you'd like. Simply select a page from the theme panel and the content of the page will display here. You can even use the drag and drop builder to create this! This is a perfect place for your company mission statement, alerts, notices or anything else.

Get In Touch

Email: support@total.com
Phone: 1-800-Total-Theme
Address: Las Vegas, Nevada

Our Location

togglebar-map

Interpreter Design Pattern

Post Series: Behavioral Design Pattern

This pattern evaluates/ interprets the instructions written in a language grammar or notations. This pattern involves implementing an expression interface which tells to interpret a particular context. This pattern is used in the compilers or parsers or Macro expansions.

interpreter design pattern c#

  • Client: This is the class that builds the abstract syntax tree for a set of instructions in the given grammar. This tree builds with the help of instances of NonTerminalExpression and TerminalExpression classes.
  • Context: This is a class that contains information (input and output), which is used by the Interpreter.
  • Expression: This is an interface that defines the Interpret operation, which must be implemented by each subclass.
  • NonTerminal: This is a class that implements the Expression. This can have other instances of Expression.
  • Terminal: This is a class that implements the Expression.

Implement

Example

Ta thấy ngay áp dụng Interpreter như nào:

  • Một object Expression chính là đại diện cho một nút của cây.
  • Context là một string cho biết giá trị của các biến, ví dụ context = "x=1,y=2".
  • Có các loại nút sau đây:
    • Nút lá (TerminalExpression) chứa một string biểu diễn một biến hoặc hằng số (x, y, 4). Method interpret(string context) của nút này sẽ tìm giá trị của x, y trong context và return giá trị tìm thấy.
    • Nút “cộng” (SumExpression) chứa tham chiếu tới hai nút con (e1, e2) có kiểu cụ thể là gì không cần biết. Method interpret(string context) của nút này đơn giản return e1.interpret(context) + e2.interpret(context).
    • Tương tự cho các nút khác …
  • Sau khi đã tạo ra cây biểu thức, để tính giá trị biểu thức với một context nào đó, chỉ việc gọi rootExpression.interpret(context).

When to use it?

  1. Need to interpret a grammar that can be represented as a large syntax trees.
  2. Parsing tools are available.
  3. Efficiency is not a concern.

Resource

http://www.dotnettricks.com/learn/designpatterns/interpreter-design-pattern-c-sharp

https://katatunix.wordpress.com/2015/01/09/interpreter-pattern-object-oriented-expression-trees/

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top