What is interpreter mode?
The interpreter design pattern is used to analyze the key elements of an entity and provide its own explanation or corresponding action for each element.
Interpreter pattern problems and solutions
The interpreter design pattern is something we often use but don’t One of the few common design patterns to be aware of. This design pattern is not restricted to class creation. In the process of creating most programming algorithms, we use the basic concepts of the interpreter design pattern.
In order to understand the working principle of the interpreter design pattern, we take the processing of macro language as an example. The command written for each macro is itself a collection of more commands. The simplified macro language makes it easier for programmers to complete creation operations without having to consider the syntax of other system commands. This can also improve security in some cases, where the programmer does not have direct access to system commands. Instead, programmers write wrapper methods to execute system commands within some kind of sandbox. The red language is interpreted and converted into a set of commands to be executed.
You can also understand the interpreter design pattern by looking at the template system. Specific predefined keywords or symbols are defined to represent other things. A template processor is used to accept code, interpret each keyword to refer to a specific set of instructions, and execute the code.
Building systems based on the interpreter design pattern allows third parties or users to more flexibly represent and retrieve data provided by the system. Instead of indicating the type of data to be retrieved through predefined method names or specific constants, we use keywords to retrieve this data.
UML
This diagram details a class design using the Interpreter design pattern.
The following is an explanation of the above picture:
1. The MyObject class handles the content that needs to be explained. It has a private string content, which stores the content that needs to be processed.
2. The storeContent() method accepts a parameter named content. This method pre-interprets the processing content and then stores the result inside the MyObject object.
3. The applyInterpretation() method will then be called. This method creates an instance of the MyInterpreter class. MyInterpreter has a public method called interpretKeys(), which accepts the parameter content.applyInterpretation() and obtains the internal content of the parameter. The MyInterpreter class performs interpretation on the content to be processed and returns the result to MyObject. Next, the applyInterpretation() method replaces the internal content variable.
4. Finally, MyObject provides the interpreted content through the getContent() method.
Usage examples
The code part of grammatical recursion needs to be implemented according to the specific situation, so it is not reflected in the code. Abstract expressions are the key to generating a grammar set. Each non-terminal expression interprets a minimal grammar unit, and then recursively combines these grammar units into a complete grammar. This is the interpreter mode.
class Context {} abstract class Expression { public abstract Object interpreter(Context ctx); } class TerminalExpression extends Expression { public Object interpreter(Context ctx){ return null; } } class NonterminalExpression extends Expression { public NonterminalExpression(Expression...expressions){ } public Object interpreter(Context ctx){ return null; } } public class Client { public static void main(String[] args){ String expression = ""; char[] charArray = expression.toCharArray(); Context ctx = new Context(); Stack<Expression> stack = new Stack<Expression>(); for(int i=0;i<charArray.length;i++){ //进行语法判断,递归调用 } Expression exp = stack.pop(); exp.interpreter(ctx); } }
The above is the detailed content of PHP object-oriented advanced design patterns: Interpreter pattern usage examples. For more information, please follow other related articles on the PHP Chinese website!