# -*- coding:UTF-8 -*-
from abc import ABCMeta, abstractmethod
class AbstractExpression(metaclass=ABCMeta):
@abstractmethod
def interpret(self, context):
pass
class TerminalExpression(AbstractExpression):
def interpret(self, context):
print("终端解释器")
class NonTerminalExpression(AbstractExpression):
def interpret(self, context):
print("非终端解释器")
class Context:
def __init__(self):
self.__input = None
self.__output = None
@property
def input(self):
return self.__input
@input.setter
def input(self, value):
self.__input = value
@property
def output(self):
return self.__output
@output.setter
def output(self, value):
self.__output = value
if __name__ == "__main__":
context_ = Context()
list_ = []
list_.append(TerminalExpression())
list_.append(NonTerminalExpression())
list_.append(TerminalExpression())
list_.append(TerminalExpression())
for exp in list_:
exp.interpret(context_)