面临问题:
如果一个特定类型的问题发生的频率比较高,原来的时候写编译器经常遇到的问题。怎样更高效的编译语句?
解决方案:
如果一种特定类型的问题发生的频率足够高, 那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器, 该解释器通过解释这些句子来解决该问题。解释器模式描述了如何为简单的语言定义一个文法并解释。
AbstractExpression(抽象表达式)
声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享
TerminalExpression(终结符表达式)
实现与文法中的终结符相关联的解释操作。一个句子中的每一个终结符需要该类的一个实例
NonterminalExpression(非终结符表达式)
对文法中的每一条规则R ::= R1/R2. . . Rn都需要一个NonterminalExpression类
为从R1到Rn的每个符号都维护一个AbstractExpression类型的实例变量
为文法中的非终结符实现Interpret操作,一般要递归地调用表示R1到Rn的那些对象的解释操作
Context(环境类)
包含解释器之外的一些全局信息
Client(客户类)
建造一个语法抽象树;调用interpret()
在非终结表达式中,pdf28页的例子有需要解释的。